2013-02-01 245 views
0

因此,我無法讀取通過Tcp流發送的字符串。我正在使用此代碼發送。從TcpClient讀取字符串

byte[] bytes = ASCIIEncoding.ASCII.GetBytes("connect"); 
NetworkStream stream = client.GetStream(); 
StreamWriter writer = new StreamWriter(stream); 
writer.Write(bytes); 
writer.Close(); 

而這種代碼改爲:

public void getConnectionString() 
{ 

    NetworkStream ns = client.GetStream(); 

    byte[] bytes = new byte[client.ReceiveBufferSize]; 
    ns.Read(bytes, 0, bytes.Length); 
    string info = Encoding.ASCII.GetString(bytes); 
    MessageBox.Show(info); 
} 

但是,這一切正在恢復的系統:字節[]

難道不應該返回字符串?我究竟做錯了什麼?

回答

2

的問題是,你打電話

writer.Write(bytes); 

後者又調用TextWriter.Write(object) - 它只是呼籲byte[]ToString()。那ToString()電話將返回System.Byte[]

創建StreamWriter的一點是,你可以寫文本

writer.Write("connect"); 

所以你不需要調用Encoding.GetBytes()自己的。但是,如果你真的只想發送ASCII下來的插座,那麼當您創建指定明確的StreamWriter

StreamWriter writer = new StreamWriter(stream, Encoding.ASCII); 

當然,另一種是你不以StreamWriter麻煩,並直接向下發送字節。儘管理解其中的差異很重要:Stream API處理二進制數據; TextWriter API處理文本數據。 (並且StreamWriter爲您執行該文本以進行二進制轉換。)