Comment puis-je envoyer des données avec un TcpListener et attendre la réponse?

StackOverflow https://stackoverflow.com/questions/1615450

  •  06-07-2019
  •  | 
  •  

Question

J'ai le code suivant:

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);
   }
}

J'envoie une chaîne à un serveur, puis j'attends la réponse.

Est-ce la bonne façon de le faire?

Si le serveur met un certain temps à traiter ce que j'ai envoyé, fonctionnera-t-il toujours ou diffusera-t-il en flux continu? Lisez le retour 0 et quittez la boucle? Ou si certains paquets de la réponse sont perdus et doivent être renvoyés, cela fonctionnera-t-il encore?

Était-ce utile?

La solution

La structure globale de votre code est correcte.

byteRead = stream.Read (buffer, 0, 1000); bloquera jusqu'à ce que toutes les données de réponse soient extraites du serveur. Si le serveur distant arrête la connexion (délai d'attente, etc.), 0 sera renvoyé.

Voir les remarques trouvés ici .

Le cadre gérera correctement les paquets perdus lors des opérations réseau - ne vous en faites pas.

Autres conseils

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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top