title: Asynchronous Socket C# Sending Data but not Recieving
body: <p>Here is my code .  I am successfully sending data but not receiving any data . here is my code below .  I am actually sending 23 bytes over the socket and its executing the event  but its not receiving the data server is sending back . I want to have persistent bi directional connection to send and receive data </p>
  
  <pre><code>using System;
  using System.Net;
  using System.Net.Sockets;
  using System.Threading;
  using System.Text;
  using System.Collections.Generic;
  
  // State object for receiving data from remote device.
  public class StateObject
  {
      // Client socket.
      public Socket workSocket = null;
      // Size of receive buffer.
      public const int BufferSize = 256;
      // Receive buffer.
      public byte[] buffer = new byte[BufferSize];
      // Received data string.
      public StringBuilder sb = new StringBuilder();
  }
  
  public class AsynchronousClient
  {
      // The port number for the remote device.
      private const int port = 18001;
  
      // ManualResetEvent instances signal completion.
      private static ManualResetEvent connectDone =
          new ManualResetEvent(false);
      private static ManualResetEvent sendDone =
          new ManualResetEvent(false);
      private static ManualResetEvent receiveDone =
          new ManualResetEvent(false);
  
      // The response from the remote device.
      private static String response = String.Empty;
  
      private static void StartClient()
      {
          // Connect to a remote device.
          try
          {
  
  
              IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("192.168.1.140"), port);
  
              // Create a TCP/IP socket.
              Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
              // Connect to the remote endpoint.
              client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
              connectDone.WaitOne();
  
              // Send test data to the remote device.
              Send(client, "This is a test&lt;EOF&gt;");
              sendDone.WaitOne();
  
              // Receive the response from the remote device.
              Receive(client);
              receiveDone.WaitOne();
  
              // Write the response to the console.
              Console.WriteLine("Response received : {0}", response);
  
              // Release the socket.
              client.Shutdown(SocketShutdown.Both);
              client.Close();
  
          }
          catch (Exception e)
          {
              Console.WriteLine(e.ToString());
          }
      }
  
      private static void ConnectCallback(IAsyncResult ar)
      {
          try
          {
              // Retrieve the socket from the state object.
              Socket client = (Socket)ar.AsyncState;
  
              // Complete the connection.
              client.EndConnect(ar);
  
              Console.WriteLine("Socket connected to {0}",
                  client.RemoteEndPoint.ToString());
  
              // Signal that the connection has been made.
              connectDone.Set();
          }
          catch (Exception e)
          {
              Console.WriteLine(e.ToString());
          }
      }
  
      private static void Receive(Socket client)
      {
          try
          {
              // Create the state object.
              StateObject state = new StateObject();
              state.workSocket = client;
  
              // Begin receiving the data from the remote device.
              client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                  new AsyncCallback(ReceiveCallback), state);
          }
          catch (Exception e)
          {
              Console.WriteLine(e.ToString());
          }
      }
  
      private static void ReceiveCallback(IAsyncResult ar)
      {
          try
          {
  
              StateObject state = (StateObject)ar.AsyncState;
              Socket client = state.workSocket;
  
              // Read data from the remote device.
              int bytesRead = client.EndReceive(ar);
  
              if (bytesRead &gt; 0)
              {
                  // There might be more data, so store the data received so far.
                  state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
  
                  // Get the rest of the data.
                  client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                      new AsyncCallback(ReceiveCallback), state);
              }
              else
              {
                  // All the data has arrived; put it in response.
                  if (state.sb.Length &gt; 1)
                  {
                      response = state.sb.ToString();
                  }
                  // Signal that all bytes have been received.
                  receiveDone.Set();
              }
          }
          catch (Exception e)
          {
              Console.WriteLine(e.ToString());
          }
      }
  
      private static void Send(Socket client, String data)
      {
  
          // F2 00 DATA FF
  
          List&lt;byte&gt; byteTemp = new List&lt;byte&gt;();
          byteTemp.Add(0XF2);
          byteTemp.Add(0X00);
  
  
          byte[] TcpData = Encoding.ASCII.GetBytes("0040005001100180");
          foreach (byte eachdata in TcpData)
          {
              byteTemp.Add(eachdata);
          }
  
          byteTemp.Add(0XFF);
  
          byte[] byteData = byteTemp.ToArray();
  
  
  
  
          client.BeginSend(byteData, 0, byteData.Length, 0,
              new AsyncCallback(SendCallback), client);
      }
  
      private static void SendCallback(IAsyncResult ar)
      {
          try
          {
              // Retrieve the socket from the state object.
              Socket client = (Socket)ar.AsyncState;
  
              // Complete sending the data to the remote device.
              int bytesSent = client.EndSend(ar);
              Console.WriteLine("Sent {0} bytes to server.", bytesSent);
  
              // Signal that all bytes have been sent.
              sendDone.Set();
          }
          catch (Exception e)
          {
              Console.WriteLine(e.ToString());
          }
      }
  
      public static int Main(String[] args)
      {
          StartClient();
          return 0;
      }
  }
  </code></pre>