C# 从TcpClient读取字符串

C# 从TcpClient读取字符串,c#,tcp,stream,byte,C#,Tcp,Stream,Byte,因此,我无法读取通过Tcp流发送的字符串。我正在使用此代码发送 byte[] bytes = ASCIIEncoding.ASCII.GetBytes("connect"); NetworkStream stream = client.GetStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(bytes); writer.Close(); 下面的代码是: public void getConnection

因此,我无法读取通过Tcp流发送的字符串。我正在使用此代码发送

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);
}
但所有这些返回的都是System:byte[]


它不应该返回字符串吗?我做错了什么?

问题是你在打电话

writer.Write(bytes);
它依次调用-它只调用
字节[]
上的
ToString()
。该
ToString()
调用将返回
System.Byte[]

创建
StreamWriter
的要点是您可以编写文本:

因此,您根本不需要自己调用
Encoding.GetBytes()
。但是,如果您真的只想在套接字下发送ASCII,则在创建
StreamWriter
时应明确指定:

StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);
当然,另一种选择是,您不必麻烦使用
StreamWriter
,而是直接沿流发送字节。不过,理解其中的区别很重要:
API处理二进制数据;
TextWriter
API处理文本数据。(并且
StreamWriter
为您执行文本到二进制的转换。)

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