嗨,我有一個使用C#套接字服務器和C++套接字客戶端的套接字編程。C++ socket讀端讀取連接的所有消息
服務器我用Socket.Send(bytes[])
發送消息
CPP客戶端我使用recv(socket,buffer,length,flags)
但在服務器,如果我在客戶端上我收到的所有消息作爲級聯同時發送多條消息。
for(int i=0;i<10;i++)
{
var bytes= GetBytes("msg"+i);
theSocket.Send(bytes);
}
C++套接字客戶端:
Thread.Start()
{
var msg = recv(theSocketClient,buffer,1024,0);
ProcessMessageFromSocket(msg);
}
預期是: 過程MSG1然後 過程MSG2 ...過程MSG10 實際: 而processMessage(msg1msg2msg3 ... MSG10);
我失蹤了? 我試圖解決這個問題: 1. C#NetworkStream.Flush() - 即使在這之後,它給了我連接的字符串 2.CPP每次讀完後擦除緩衝區(但實際套接字有數據連接,沒有幫助)
你必須記住,TCP是一個流媒體協議,沒有開始或結束的流,數據只是流動。如果你需要分離消息,你必須自己做。 –
例如,IRC使用'\ r \ n'(回車,然後換行)來分隔消息。 – Mgetz