您好我使用C#套接字服务器和C ++套接字客户端进行套接字编程。
服务器我使用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 ++ Socket CLient:
Thread.Start()
{
var msg = recv(theSocketClient,buffer,1024,0);
ProcessMessageFromSocket(msg);
}
预期是: 然后进程msg1 处理msg2 ...处理msg10 实际: processMessage(msg1msg2msg3 ... msg10);
我缺少什么? 我尝试解决这个问题: 1. C#NetworkStream.Flush() - 即使在此之后它也会给我串联字符串 2. CPP每次完成读取后我擦除缓冲区(但实际的套接字连接了数据,所以这没有帮助)
答案 0 :(得分:2)
以这种方式工作是正常的。您可以自行定义自己的分割数据协议,例如,您可以选择以4个字节开始每个传输,告诉您传输的时间。
答案 1 :(得分:1)
简单 - TCP不能传输超过一个字节的任何消息 - 它是一个八位字节/字节流。
如果要传输长度超过一个字节的消息,则需要在TCP之上使用其他协议。