我正在尝试让我的客户端应用程序从服务器读取响应,而我在这里抓住某个概念时遇到了麻烦。
根据我所做的研究,你必须具有从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字节呢?什么?
如果有人能帮助我理解这个概念,我将非常感激。
答案 0 :(得分:1)
你需要循环,同时NetworkStream.DataAvailable为true;看到这里:
http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx
答案 1 :(得分:1)
您需要在发送方和接收方之间建立某种预先商定的方案(协议),以确定“消息结束”。
通常,这是通过使用包含消息长度的标头启动消息来完成的。例如,双方都可以同意前4个字节确定传入消息的长度,因此接收器读取那么多字节。
另一种方法是使用一个特定的字节序列来表示消息的结束。例如,接收器继续读入,直到它看到<EOF>
的ascii字节。
请勿使用DataAvailable
,因为您很可能会以块的形式收到邮件,因此DataAvailable
可能会在收到完整邮件之前变为false。