C# 在networkstream读取中随机获取空消息

C# 在networkstream读取中随机获取空消息,c#,C#,我正在做一个多渠道聊天项目。每次客户端加入频道时,服务器都会广播有人加入的消息 我必须确保客户端只接收到属于其当前所在频道的消息 所以我做了一些类似的事情: clientName$channelName^ clientName$JoinedChannelName^ 我使用$and^告诉程序哪个子字符串是客户端名称和通道名称 当然,当服务器正在广播客户机加入事件或客户机消息发送事件时,程序需要知道如何提取channelName,因为这样它可以确定消息是否属于该频道 一切都很好,但是 加入的客户端

我正在做一个多渠道聊天项目。每次客户端加入频道时,服务器都会广播有人加入的消息

我必须确保客户端只接收到属于其当前所在频道的消息

所以我做了一些类似的事情:

clientName$channelName^
clientName$JoinedChannelName^
我使用$and^告诉程序哪个子字符串是客户端名称和通道名称

当然,当服务器正在广播客户机加入事件或客户机消息发送事件时,程序需要知道如何提取channelName,因为这样它可以确定消息是否属于该频道

一切都很好,但是

加入的客户端的广播很好,在我键入一些应该发送到频道的单词后,频道正确地广播了它。但不知何故,客户端在其网络stream.read上又收到了一条空消息。我检查了服务器,它没有做任何不必要的广播。空洞的信息不是什么大问题;它很容易修复,但我想知道为什么…如果您以前遇到类似情况,请帮助

这是代码的故障部分。我不能给出全部代码,因为它太长了

string chan_name = null;
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[10025];
buffSize = clientSocket.ReceiveBufferSize;
MessageBox.Show("Waiting for client input");
serverStream.Read(inStream, 0, buffSize);
MessageBox.Show("got client input");
您所说的“客户端在其网络流上收到另一条空消息。读取”是什么意思?即使没有要读取的数据,NetworkStream.Read也会返回,在这种情况下,返回值为0。您应该检查返回值是否大于0,或者查看流的DataAvailable标志,请参见MSDN中的示例: