2013-02-01 194 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为您执行该文本以进行二进制转换。)