2012-02-12 7 views
0

可能性の重複:私はC#でTCPクライアントを構築している
NullReferenceException on instanciated object?
What is a NullReferenceException in .NET?例外:System.NullReferenceException

、クライアントはImは下記なっ接続することはできません。 私は次のコードでNullReference例外を取得し続けます。私はそれを捕まえるか停止する方法を理解することはできません..任意のヘルプは非常に高く評価されます。 "int型のA = sReponseData.Length"

{ 



     string sMesg = "LogOn Ext:" + txtdevice.Text; 
     SendMessage(sMesg); 


     int a = sResponseData.Length; 


     //Geting the Script out of the message. 

     if (a > 10) 
     { 
      string stemp = sResponseData; 
      string[] sSplit = stemp.Split(new Char[] { ';'}); 
      foreach (string s in sSplit) 
      { 

       if ((s.Trim() != "Tag") & (s.Trim() != "StopStart")) 
        sScript = s; 
      } 
     } 
    } 

}ここ

とで起こって

ITSはsMesgある

{ 
     InitializeComponent(); 
     try 
     { 
      // Create a TcpClient. 
      // Note, for this client to work you need to have a TcpServer 
      // connected to the same address as specified by the server, port 
      // combination. 
      //Int32 port = 13000; 
      TcpClient client = new TcpClient("127.0.0.1", 32111); 

      // Translate the passed message into ASCII and store it as a Byte array. 
      Byte[] data = System.Text.Encoding.ASCII.GetBytes(sMsg); 

      // Get a client stream for reading and writing. 
      // Stream stream = client.GetStream(); 

      NetworkStream stream = client.GetStream(); 

      // Send the message to the connected TcpServer. 
      stream.Write(data, 0, data.Length); 

      //MessageBox.Show("Sent: {0}" + sMsg); 

      // Receive the TcpServer.response. 


      // String to store the response ASCII representation. 
      sResponseData = String.Empty; 

      if (stream.CanRead) 
      { 
       byte[] myReadBuffer = new byte[1024]; 
       StringBuilder myCompleteMessage = new StringBuilder(); 
       int numberOfBytesRead = 0; 

       // Incoming message may be larger than the buffer size. 
       do 
       { 
        numberOfBytesRead = stream.Read(myReadBuffer, 0, myReadBuffer.Length); 

        myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)); 

       } 
       while (stream.DataAvailable); 

       // Print out the received message to the console. 
       sResponseData = myCompleteMessage.ToString(); 
       //MessageBox.Show(sResponseData); 
      } 
      else 
      { 
       sResponseData = ("3"); 
       MessageBox.Show("TagIt Server is unavalible at this moment."); 
      } 

      // Close everything. 
      stream.Close(); 
      client.Close(); 
     } 
     catch (ArgumentNullException e) 
     { 
      WriteLog("ArgumentNullException: {0}" + e); 
      MessageBox.Show("TagIt Server is unavalible at this moment."); 
     } 
     catch (SocketException e) 
     { 
      WriteLog("SocketException: {0}" + e); 
      MessageBox.Show("TagIt Server is unavalible at this moment."); 
     } 

    } 
+2

コードのどの行に例外がありますか?例外メッセージ全体を読んでください。 –

+1

その行でヌルにできるのは 'sResponseData'だけです。だから私は2番目の関数が呼び出されることはないと推測していますが、それ以上の情報を取得せずに知ることは不可能です。デバッガを起動し、sResponseDataが実際にエラーを取得している場所であるかどうか、呼び出されたかどうかを調べる2つ目の関数、そうでない場合はスキップされた理由を確認する関数を呼び出します。 – millimoose

答えて

0

レスポンスデータが値を持っているかどうかをチェックすることができます:

何かのように:

int a; 
try 
{ 
if(sResponseData==null || sResponseData=="") 
    { 
    MessageBox.Show("ResponseData is NULL or Empty"); //Shows Error 
    } 
    else 
    { 
    //SresponseData has value 
    string sMesg = "LogOn Ext:" + txtdevice.Text; 
    SendMessage(sMesg); 


    a= Convert.ToInt32(sResponseData).Length; 

    //Geting the Script out of the message. 

    if (a > 10) 
    { 
     string stemp = sResponseData; 
     string[] sSplit = stemp.Split(new Char[] { ';'}); 
     foreach (string s in sSplit) 
     { 

      if ((s.Trim() != "Tag") & (s.Trim() != "StopStart")) 
       sScript = s; 
     } 
    } 
    } 
} 
catch (Execption ex) 
{ 
MessageBox.Show(ex.Message); //Shows Error 
} 
0

sResponseDataの長さをチェックする前に、sResponseDataがnullかどうかを確認してください。

関連する問題