如果数据大小超过1074字节,则TCP消息在Win7中被分段(拆分)

如果数据大小超过1074字节,则TCP消息在Win7中被分段(拆分),tcp,messages,Tcp,Messages,我使用了.NETFramework中的简单套接字类通过TCP发送和接收数据消息。当我在Windows XP上运行tcp客户端应用程序时,数据消息不会被分割(拆分)。但是,当我在Windows7上运行相同的tcp客户端应用程序时,当数据消息大小超过1074字节时,数据消息会被分割 IPEndPoint ipEndPoint = new IPEndPoint("<server ip address>", 601); Socket tcpSocket = new Socket(ipEnd

我使用了.NETFramework中的简单套接字类通过TCP发送和接收数据消息。当我在Windows XP上运行tcp客户端应用程序时,数据消息不会被分割(拆分)。但是,当我在Windows7上运行相同的tcp客户端应用程序时,当数据消息大小超过1074字节时,数据消息会被分割

IPEndPoint ipEndPoint = new IPEndPoint("<server ip address>", 601); 
Socket tcpSocket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tcpSocket.Connect(ipEndPoint.Address, ipEndPoint.Port);
tcpSocket .Send(data, data.Length, 0);
tcpSocket.Close();
IPEndPoint-IPEndPoint=新的IPEndPoint(“,601);
Socket tcpSocket=新套接字(ipEndPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
tcpSocket.Connect(ipEndPoint.Address,ipEndPoint.Port);
发送(数据,数据长度,0);
tcpSocket.Close();

如果您有任何建议,请告诉我。

TCP连接是一个字节流,它不知道您的消息边界

从TCP连接进行的任何单个读取都可以(并且将)返回1字节和提供的缓冲区大小之间的值。这可能会因网络状况而改变

通过对Send()的特定调用写入TCP连接的数据量与通过对Recv()的调用从连接读取的数据量之间没有关系,除非所有写入的数据都将由一系列Recv调用返回

您应该始终循环接收数据,并使用自己的消息框架来确定消息边界


我在这里写了更多关于这方面的内容:早在2002年。

如果发送更多数据会发生什么?发送1M之类的邮件,看看它是否一直在分裂。这种情况发生在同一个网络上吗?