当我向网络流写入两个单独的字节数组时,有时我得不到第一个字节数组。 这是为什么?
例如,这失败了,没有收到 header ,有时由另一端的 Read() 接收
byte[] header = msg.getByteHeader();
byte[] data = msg.getByteData();
clientStream.Write(header, 0, header.Length);
clientStream.Write(data, 0, data.Length);
clientStream.Flush();
然而这成功了
NetworkStream clientStream = tcpClient.GetStream();
byte[] header = msg.getByteHeader();
byte[] data = msg.getByteData();
int pos = 0;
Array.Copy(header, 0, message, pos, header.Length);
pos += header.Length;
Array.Copy(data, 0, message, pos, data.Length);
clientStream.Write(message, 0, message.Length);
这是我的 Read() 的样子
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4);
//string stringData = Encoding.ASCII.GetString(message, 0, bytesRead);
len = BitConverter.ToInt32(message, 0);
//MessageBox.Show(len.ToString());
bytesRead = clientStream.Read(message, 0, 5 + len);
}
最佳答案
我认为这是一个时间问题。在您第一次打开套接字通信和您可以从缓冲区中读取第一个数据之间存在滞后。这不是瞬间的。您可以在尝试读取之前查询网络流的 DataAvailable bool 状态。如果没有 DataAvailable,则让线程休眠 100 毫秒,然后再次尝试读取。
关于c# - C# 中 networkstream.read() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376818/