title: Reading from a socket in C#
body: <p>I am trying to read ASCII text response from a tcp open streaming socket</p>
  
  <p>This is what I have come up with so far.  I want to know what is the best way to do this that includes error handling.  Should I also be checking the SocketError after the Receive call in the do loop?</p>
  
  <pre><code>IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 9000);
  Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  sock.SendTimeout = 5000;
  sock.ReceiveTimeout = 5000;
  if (null != sock)
  {
      try
      {
          sock.Connect(ep);
          if (sock.Connected)
          {
  
              // Blocks until send returns.
              int bytesSent = sock.Send(buffer);
              Console.WriteLine("Sent {0} bytes.", bytesSent);
              //get the first 4 bytes, should be the lenngth of the rest of the response.
              byte[] response = new byte[4];
              int bytesRec = sock.Receive(response);
              int totalBytesRec = 0;
              if (4 == bytesRec)
              {
                  int len = BitConverter.ToInt32(response, 0);
                  response = new byte[len];
                  Console.WriteLine("Trying to get {0} bytes.", len);
                  bytesRec = 0;
  
                  do
                  {
                      bytesRec = sock.Receive(response);
                      totalBytesRec += bytesRec;
                      forecast += Encoding.ASCII.GetString(response, 0, bytesRec);
                  } while (totalBytesRec &lt; len &amp;&amp; bytesRec &gt; 0);
  
                  if (totalBytesRec != len)
                      throw new Exception("The total bytes recieved from manager did not equal the expected bytes");
              }
              else
                  throw new Exception("Unable to get the response size from the manager");
  
  
              Console.WriteLine("Received {0} bytes.", totalBytesRec);
          }
  
      }
      catch (SocketException ex)
      {
          Console.WriteLine("{0} Error code: {1}.", ex.Message, ex.ErrorCode);
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex.Message);
      }
      finally
      {
          sock.Shutdown(SocketShutdown.Both);
          sock.Close();
      }
  }
  </code></pre>