2008-09-06 72 views
2

我正在嘗試從TCP打開流式套接字讀取ASCII文本響應從C#中的套接字讀取#

這是我到目前爲止所提出的。我想知道什麼是包含錯誤處理的最佳方法。我應該在do循環中的Receive調用之後檢查SocketError嗎?

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 < len && bytesRec > 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(); 
    } 
} 

回答