Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I send data with a TcpListener, and wait for the response?

Tags:

c#

tcplistener

I have the following code:

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

I send a string to a server, and then wait for the response.

Is this the proper way to do it?

If the server takes some time to process what I sent, will it still work or will stream.Read return 0 and exit the loop? Or if some packets from the response are lost and need to be resent, will it still work?

like image 994
Kevin Doyon Avatar asked Oct 14 '22 13:10

Kevin Doyon


1 Answers

The overall structure of your code looks right.

byteRead = stream.Read(buffer, 0, 1000); will block until all of the response data is retrieved from the server. If the remote server shuts down the connection (timeout, etc), 0 will be returned.

See the remarks found here.

The framework will properly deal with packets lost during network operations - don't worry about them.

like image 151
Brandon Avatar answered Oct 18 '22 22:10

Brandon