c#套接字缺少数据
本文关键字:数据 套接字 | 更新日期: 2023-09-27 17:59:10
我有以下代码来读取从服务器发送到客户端的消息:
while (true) {
byte[] readBuffer = new byte[327680];
StringBuilder message = new StringBuilder(327680);
while (true) {
do {
int bytes = ServerStream.Read(readBuffer, 0, readBuffer.Length);
message.AppendFormat("{0}", Encoding.ASCII.GetString(readBuffer, 0, bytes));
}
while (ServerStream.DataAvailable);
if (message.Length > 0) {
foreach (string msg in message.ToString().Split(MESSAGE_END)) {
if (msg != "") ProcessServerMessage(msg);
}
message.Clear();
readBuffer = new byte[327680];
}
}
}
不幸的是。。。不时地,变量"消息"似乎被切断了,我无法理解。我已经把读取缓冲区做得很大,看看这是否是问题所在,但这无济于事。当服务器同时发送大量数据,但远未达到327680字节时,似乎会发生这种情况。。。
此外,在检查服务器日志时,它似乎是在完整地、不间断地发送数据。这就像一半的信息在互联网上的某个地方"丢失"了。。。但这是TCP,所以这不应该发生,对吧?
提前感谢
它没有丢失,您没有正确执行缓冲读取。尽管您正在检查DataAvailable
,但很可能发件人还没有刷新该数据。所以它"正在路上"(等待发送),但DataAvailable
将返回false,因为它尚未到达。
最好在数据之前发送一个整数,这样接收器就知道需要多少数据,或者寻找某种终止符(null、换行符等)。