问题描述
|
我正在尝试使用ѭ0来实现客户/服务器模型,并使用ѭ1来发送/接收字节数组。
它大部分时间都可以工作,除非我尝试连续发送三个或更多字节数组。客户端说它全部发送了,但是服务器只接收前两个。
下面是我用来从客户端到服务器写的代码。
byte[] buffer = p.toByteArray(level);
stream.Write(buffer,buffer.Length);
stream.Flush();
是巩固他们还是什么?我只是不明白,当我发送2而不是3或更多时,服务器如何接收不同的数组。如果我将这3个写入分开,则可以正常工作,但是我真的不想这样做。
任何帮助将非常感激。
编辑:
解决了 :)
谢谢大家的帮助。它一次推送2-3个数据包,而我的系统认为1个突发= 1个数据包。我只是用TCPClient重新编写了现有体系结构以检测多个数据包:)再次感谢您的帮助!
解决方法
在进行套接字编程时,有一个非常重要的核心规则很重要:
不能保证无论以X方式发送的任何客户端写入,服务器都将接收完全相同数量的读取。在客户端上可以是一次写入,而在服务器上可以是10次读取。它可以是10个写入和一个客户端,而在服务器上只有一个读取。
假设客户端发送3条消息,每条100字节。服务器可能会收到150个字节,然后再接收150个字节。或100个字节和200个字节。
如果使用TCP,唯一可以保证的是顺序将被保留,换句话说,首先发送的内容将首先到达服务器。
您可以使用以下基本技术之一来分离数据:
标记(某种分隔消息的字节序列)
每个消息的长度恒定
消息头中的长度
以上的组合