【发布时间】:2011-06-16 05:56:52
【问题描述】:
我有以下代码来读取从服务器发送到客户端的消息:
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,所以这不应该发生,对吧?
提前致谢
【问题讨论】:
-
有什么理由不能使用WCF?即使您的服务器端代码位于消息中间,也有很多事情在幕后发生,可能会使
.DataAvailable属性为假。 WCF 将为您简化所有这一切以及更多。 -
现在改变游戏已经太晚了,不幸的是......我不知道WCF。 :
-
这可能值得您花时间。它易于使用,有很多示例,并且可能会为您省去很多麻烦。不过只是一个建议。否则按照 Chris 的建议去做。