我遇到了从网络流读取和写入网络流的问题。
我认为服务器发送消息的速度非常快,它可以将两个协议一起发送(或更多),而不是自己发送。这不应该是任何问题,因为我有一个标题和每个协议的结束。标头为"CHAT"
,结尾为"DEL"
(控制字符为127)。
当我的网络观察者读取DEL字符时,它会触发收到新数据的事件。在它触发数据接收事件之前,它检查是否收到了至少六个字节(因为我的标题是" CHAT" + Type" IA"(例如:还活着))。
然后它检查消息是否来自类型"是否活着"不应该发起一个事件,因为它的目的只是检查对方是否还在这里(这就是为什么我使用继续)。例如,当两个协议一起发送时,它会一直读取,直到第一个协议结束,触发事件然后再次开始读取,直到下一个协议结束。
这就是我实施的逻辑,但似乎我犯了一个错误。这里是我读取方法的代码:
private void Read()
{
while (this.isReading == true)
{
/*if (this.stream.DataAvailable == false)
{
Thread.Sleep(10);
continue;
}*/
List<byte> receivedBytes = new List<byte>();
byte[] buffer = new byte[1];
while (this.stream.DataAvailable == true)
{
this.stream.Read(buffer, 0, 1);
if (buffer[0] == 127)
{
break;
}
receivedBytes.Add(buffer[0]);
}
if (receivedBytes.Count >= 6)
{
if (receivedBytes[0] == 67 && receivedBytes[1] == 72 && receivedBytes[2] == 65 && receivedBytes[3] == 84)
{
if (receivedBytes[4] == 73 && receivedBytes[5] == 65)
{
continue;
}
this.FireOnDataReceived(receivedBytes.ToArray());
}
}
}
}