【发布时间】:2014-05-02 18:51:50
【问题描述】:
您好,我有一个使用 C# Socket Server 和 C++ Socket Client 的套接字编程。
我使用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 实际的: 进程消息(msg1msg2msg3...msg10);
我错过了什么? 我试图解决这个问题: 1. C# NetworkStream.Flush() -- 即使在这之后它给了我连接的字符串 2. CPP 每次完成读取后我都会擦除缓冲区(但实际的套接字有数据连接,所以这没有帮助)
【问题讨论】:
-
您必须记住,TCP 是一种流协议,流没有开始或结束,数据只是流动。如果您需要在消息之间分开,您必须自己做。
-
例如 IRC 使用
\r\n(回车然后换行)来分隔消息。