我有以下代码来读取从服务器发送到客户端的消息:
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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是......时不时变量'消息'似乎都会被切断,我无法理解.我已经把读取缓冲区变得很大,看看是不是问题,但它没有帮助.这似乎发生在服务器一次发送大量数据时,但是在327680字节附近...
此外,在检查服务器日志时,它似乎完全发送数据,未切断.这就像有一半的信息在互联网上丢失了......但这是TCP,所以这不应该发生,对吧?
提前致谢
它没有丢失,你没有正确地进行缓冲读取.即使您正在检查DataAvailable,也可能是发件人尚未刷新该数据.所以它"正在路上"(等待发送),但DataAvailable会因为尚未到达而返回false.
最好在数据之前发送一个整数,以便接收方知道要预期的数据量,或者寻找某种终结符(null,换行符,某些东西).