我正在尝试使用TCpClient
实现客户端/服务器模型,其Networkstream.Write()/Read()
函数发送/接收字节数组。
它大部分时间都有效,除非我尝试连续发送三个或更多字节数组。客户端表示它会全部发送,但服务器只接收前两个。
以下是我用来从客户端写入服务器的代码。
byte[] buffer = p.toByteArray(level);
stream.Write(buffer, 0, buffer.Length);
stream.Flush();
它是在巩固它们还是什么?我只是不明白当我发送2时服务器如何接收不同的数组,但不是3或更多。如果我将3个写入分开,它可以正常工作,但我真的不想这样做。
非常感谢任何帮助。
修改
已解决:) 谢谢你们所有人的帮助。它一次推送2-3个数据包,我的系统认为1个突发= 1个数据包。我刚用TCPClient重写了我现有的架构来检测多个数据包:)再次感谢您的帮助!
答案 0 :(得分:1)
在进行套接字编程时,有一个非常重要的核心规则很重要:
无法保证在X中发送的任何客户端写入,服务器将完全接收相同数量的读取。它可以是客户端上的一个写入和服务器上的10个读取。它可以是10次写入和客户端,只需在服务器上读取一次。
假设客户端发送3条消息,每条消息100个字节。服务器可能会收到150个字节,然后再收到150个字节或100字节和200字节。
如果您使用TCP,唯一可以保证的是订单将被保留,换句话说,您首先发送的任何内容都将首先到达服务器。
您可以使用以下基本技术之一来分隔数据: