2013-02-18 155 views
0

使用TCP套接字,我的客戶端/服務器有一種情況,即客戶端正在發送消息,服務器正在接收並將它們寫入文件。我遇到的問題是由於某些原因,即使我將郵件拆分了,它們都在一條線上收到。Qt TcpSockets - 一次收到多個發送請求

因此,例如..說我在通過使用行發送一個文本文件行:

socket->write(msg.toUtf8().constData()); 
    socket->waitForBytesWritten(5000); 

服務器有時接收多個消息都在一個接收。

因此,如果文本文件中說:

你好,

這是客戶端

有時服務器將收到「您好,這是客戶端」,接收這兩個消息一起的時候,他們應該有已經分開。

有人可能會說我把它編碼錯了,但奇怪的是,如果我在本地測試客戶端/服務器,它都可以正常工作。只要我通過網絡完成,這個問題就開始發生。我做了一些測試,增加了發送消息之間的延遲。這也解決了這個問題,但只是在我將每個消息的延遲增加到接近1秒之後。如果需要發送大量的消息,則這是一個問題,每個消息最終需要很長時間。

回答

4

請記住,TCP是一個流式傳輸協議。沒有自然的消息邊界,數據只是一個字節流。

如果你想分開消息,你必須在包含這些邊界的TCP之上添加一個協議。對於文本來說,換行符是一個自然的邊界,用於許多基於文本的協議。

+0

這並沒有真正回答我的問題,但它指出我在正確的方向,是準確的。謝謝! – Mitch 2013-02-21 08:22:46