【发布时间】:2010-12-09 14:00:03
【问题描述】:
我有以下代码:
using (TcpClient client = new TcpClient())
{
client.Connect(host, port);
using (SslStream stream = new SslStream(client.GetStream(), true))
{
stream.AuthenticateAsClient(host);
stream.Write(System.Text.Encoding.ASCII.GetBytes(dataToSend));
int byteRead = 0;
byte[] buffer = new byte[1000];
do
{
byteRead = stream.Read(buffer, 0, 1000);
reponse += System.Text.Encoding.ASCII.GetString(buffer, 0, byteRead);
}
while (byteRead > 0);
}
}
我向服务器发送一个字符串,然后等待响应。
这是正确的做法吗?
如果服务器需要一些时间来处理我发送的内容,它仍然可以工作还是 stream.Read 返回 0 并退出循环?或者如果响应中的一些数据包丢失并且需要重新发送,它仍然可以工作吗?
【问题讨论】:
-
您不应该担心通过 TCP 连接丢失数据,这取决于网络代码通过再次询问丢失的数据包来确保不会发生这种情况。它对您的应用程序是透明的。
-
我知道我不能丢失数据,但我害怕数据延迟。我不知道 Read 会阻塞。 MSDN 文档不是很清楚。它说:“此方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有数据可供读取,则Read方法返回0。”所以我想如果服务器还没有处理我的字符串,我的 Read 将返回 0,我将永远不会收到任何东西。由于Read是阻塞方法,所以没关系。
标签: c# tcplistener