0

我试图让我的客户端应用程序读取来自服务器的响应,我真的很难在这里掌握某个概念。

根据我所做的研究,在实际读取数据之前,您必须具有要从 a 读取的字节长度。NetworkStream这对我来说意义不大。您应该如何在数据到达之前知道有多少数据进入?

这段代码:

using (var stream = client.GetStream())
{
    stream.Write(data, 0, data.Length);
    stream.Flush();

    Console.WriteLine("Data sent.\n");

    Console.WriteLine("Reading response...\n");

    byte[] buffer = new byte[1024];

    int bytesRead = stream.Read(buffer, 0, buffer.Length);
}

将 1024 字节读入具有设定大小的缓冲区。那么如果来自服务器的响应超过1024 字节怎么办?然后呢?

如果有人可以帮助我掌握这个概念,我将非常感激。

4

2 回答 2

1

您需要在 NetworkStream.DataAvailable 为真时循环;看这里:

http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx

于 2013-10-15T20:33:50.250 回答
1

您需要在发送方和接收方之间有某种预先商定的方案(协议),以确定“消息结束”。

通常这是通过使用包含消息长度的标头开始消息来完成的。例如,双方可以同意前 4 个字节确定传入消息的长度,因此接收方读取那么多字节。

另一种方法是使用特定的字节序列来表示消息的结束。例如,接收器一直在读,直到它看到<EOF>.

不要使用DataAvailable,因为您很可能会收到分块的消息,因此DataAvailable在收到完整消息之前可能会变为 false。

于 2013-10-15T20:52:02.180 回答