所以我在读取通过 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);
}
但这一切返回的是系统:字节[]
它不应该返回字符串吗?我做错了什么?
问题是你正在调用
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
为您执行文本到二进制的转换。