2015-09-18 28 views
0

我想創建一個套接字與服務器的連接。爲此,我傳遞一個XML並將其存儲在字符串ngconnect中。現在,而debbuging代碼 我發現serverstream.Write異常的長度='serverStream.Length'拋出一個異常'System.NotSupportedException'

「serverStream.Length」扔類型的異常的「System.NotSupportedException」

什麼可能是這樣的原因異常,我如何刪除它們。

 private void button1_Click(object sender, EventArgs e) 
     { 
      portadd = textBox2.Text; 

      ip = textBox1.Text; 
      port = Convert.ToInt32(portadd); 
      clientSocket.Connect(ip, port); 
      NetworkStream serverStream = clientSocket.GetStream(); 
      byte[] outStream = System.Text.Encoding.ASCII.GetBytes(ngconnect); 
      serverStream.Write(outStream, 0, 200); 
      serverStream.Flush(); 

      byte[] inStream = new byte[10025]; 
      serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize); 
      string returndata = System.Text.Encoding.ASCII.GetString(inStream); 
      msg(returndata); 
      textBox3.Focus(); 

    } 
+0

請顯示*你在哪裏得到異常(並且請同時改進你的代碼格式)。另外,您忽略了'Read'的返回值,這絕不是一個好主意 - 並且您還在UI線程中執行IO,這會在UI執行IO時使UI無響應。 –

+0

我在serverStream.write(outStream,0,200)處得到異常; –

+0

請在問題中填寫完整的堆棧跟蹤。 –

回答

1

如果我是正確的,應用程序沒有拋出異常,但你調試,檢查serverStream看到在調試器中的例外。

這是正常行爲 - Visual Studio嘗試顯示所有屬性值,並且NetworkStream不支持Length屬性。有關更多信息,請參見the MSDN

NotSupportedException:從Stream派生的類不支持查找。

您可以檢查任何StreamCanSeek屬性來驗證它是否支持求,所以Length財產。

+0

是的,你是對的。這是一個內部例外。我剛開始知道我試圖連接的服務器被設置爲讀取數據的前4個字節,作爲沒有發送的流的長度。 –