Monday, December 26, 2011

Asynchronous TCP Client Easy Example


 private TcpClient tcpClient = null;

         public void ConnectToServer()
         {
                try
               {
                tcpClient = new TcpClient(AddressFamily.InterNetwork);

                IPAddress[] remoteHost = Dns.GetHostAddresses("hostaddress");
              
                //Start the async connect operation          

                tcpClient.BeginConnect(remoteHost, portno, new
                              AsyncCallback(ConnectCallback), tcpClient);

                }
                catch (Exception ex)
                {
Logger.WriteLog(LogLevel.Error,"ex.Message);
                 }
         }
      

        private void ConnectCallback(IAsyncResult result)
        {                      
            try
            {
              //We are connected successfully.

               NetworkStream networkStream = tcpClient.GetStream();

               byte[] buffer = new byte[tcpClient.ReceiveBufferSize];

              //Now we are connected start asyn read operation.

               networkStream.BeginRead(buffer, 0, buffer.Length, ReadCallback, buffer);
             }
             Catch(Exception ex)
             {
Logger.WriteLog(LogLevel.Error,"ex.Message);
              }
          }
      

          
          /// Callback for Read operation
         private void ReadCallback(IAsyncResult result)
         {    
  
            NetworkStream networkStream;

            try
            {

                networkStream = tcpClient.GetStream();  
        
            }

            catch
            {
Logger.WriteLog(LogLevel.Warning,"ex.Message);
             return;

            }        

            byte[] buffer = result.AsyncState as byte[];

            string data = ASCIIEncoding.ASCII.GetString(buffer, 0, buffer.Length );

            //Do something with the data object here.

            //Then start reading from the network again.

            networkStream.BeginRead(buffer, 0, buffer.Length, ReadCallback, buffer);

        }
    
  

7 comments:

  1. Handy. There's a couple of typo's though.

    ReplyDelete
  2. Excelente me sirvió bastante ya tenia mucho buscando como hacer esto. Saludos!

    ReplyDelete
  3. Why the CallBack is never called ?

    ReplyDelete
  4. CallBack will work only if application receive any response/ack message from server application

    ReplyDelete
  5. When I start my socket server that does nothing and start this script, I am getting callbacks all the time, even though the server does not send anything.

    ReplyDelete
  6. what about write data do server after received something. With infinited loop of course.

    ReplyDelete