5

我有以下代码:

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 并退出循环?或者如果响应中的一些数据包丢失并且需要重新发送,它仍然可以工作吗?

4

2 回答 2

5

您的代码的整体结构看起来是正确的。

byteRead = stream.Read(buffer, 0, 1000);将阻塞,直到从服务器检索到所有响应数据。如果远程服务器关闭连接(超时等),将返回 0。

请参阅此处的备注。

该框架将正确处理网络操作期间丢失的数据包 - 不要担心它们。

于 2009-10-23T19:40:15.057 回答
-1
public string Method()
{
  m_Client = new TcpClient();
  m_Client.Connect(m_Server, m_Port);
  m_Stream = m_Client.GetStream();
  m_Writer = new StreamWriter(m_Stream);
  m_Reader = new StreamReader(m_Stream);
  m_Writer.WriteLine(request);
  m_Writer.Flush();

  return m_Reader.ReadToEnd();
}
于 2009-10-23T19:34:50.000 回答