C#网络流在读取后仍然包含旧数据



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

接着是一束CCD_ 1。

最后一个区块是DateTime,由于额外的AM,它无法将字符串转换为DateTime。即使在我们通过流发送的字符串末尾附加\0,它也无法工作。例如:

1|0|jim|horne|9/14/2012 12:49:34 AMM

它似乎将null终止视为另一个字符,而不是停止读取字符串的信号。

"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);
}

Stream.Read()返回接收到的字节数,之后的字节未定义。

在消息前面加上要读取的字节/字符数。。。

比如:<integer><delimeter char><正常消息>

在接收器端,尝试为delimeter字符找到第一个匹配项。。。解析该delimeter之前的部分中的int。。。尝试读取delimeter 之后的字节/字符数

相关内容

  • 没有找到相关文章

最新更新