C ++套接字读取端读取连接的所有消息

时间:2014-05-02 18:51:50

标签: c# c++ c sockets winsock2

您好我使用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每次完成读取后我擦除缓冲区(但实际的套接字连接了数据,所以这没有帮助)

2 个答案:

答案 0 :(得分:2)

以这种方式工作是正常的。您可以自行定义自己的分割数据协议,例如,您可以选择以4个字节开始每个传输,告诉您传输的时间。

答案 1 :(得分:1)

简单 - TCP不能传输超过一个字节的任何消息 - 它是一个八位字节/字节流。

如果要传输长度超过一个字节的消息,则需要在TCP之上使用其他协议。