【发布时间】:2012-09-07 05:56:57
【问题描述】:
C# 中 TCP 套接字通信的新手,遇到问题,我从客户端应用程序通过网络流发送一些数据,然后从我的服务器应用程序读取它。数据第一次通过正常,但下次我尝试发送数据时,旧数据仍在网络流中,并且无论新数据的长度如何,都会被覆盖。这会在尝试解析流中的数据时引起问题。我已经尝试添加一个空终止,但它似乎没有任何效果。
如何在发送更多数据之前清空网络流?
我们发送这样的字符串:
1|0|bob|cornell|9/14/2012 12:49:34 AM
然后是这样的另一个:
1|0|jim|horne|9/14/2012 12:49:34 AM
但第二个字符串通过:
1|0|jim|horne|9/14/2012 12:49:34 AMAM
...后面跟着一堆\0。
最后一个块是 DateTime,由于额外的 AM,它无法将字符串转换为 DateTime。即使将 \0 附加到我们通过流发送的字符串的末尾,它也不起作用。例如:
1|0|jim|horne|9/14/2012 12:49:34 AM\0M
似乎将空终止仅视为另一个字符,而不是停止读取字符串的信号。
“Flush”似乎对 NetworkStream 类型没有任何作用。在这里一定是一个愚蠢的问题,但任何帮助表示赞赏。
客户端这样做:
private static void writeToServer(MessagePacket message, NetworkStream clientStream)
{
clientStream.Write(message.ToBytes(), 0, message.ToBytes().Length);
}
服务器这样做:
byte[] rawMessage = new byte[4096];
while (true)
{
try
{
clientStream.Read(rawMessage, 0, 4096);
clientStream.Flush();
}
catch
{
break;
}
newPacket = new MessagePacket(rawMessage);
}
【问题讨论】:
-
我认为您正在寻找一些刷新方法...您可以显示相关代码吗?
-
用一些额外的信息更新了描述。