所以我在阅读通过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 []
它不应该返回字符串吗?我做错了什么?
答案 0 :(得分:2)
问题是你正在打电话
writer.Write(bytes);
反过来调用TextWriter.Write(object)
- 只需调用ToString()
上的byte[]
。该ToString()
来电将返回System.Byte[]
。
创建StreamWriter
的关键是您可以编写文本:
writer.Write("connect");
因此,您根本不需要自己致电Encoding.GetBytes()
。但是,如果确实只想在套接字中发送ASCII,则应在创建StreamWriter
时明确指定:
StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);
当然,另一种方法是您不需要使用StreamWriter
,并直接在流中发送字节。但是,了解差异非常重要:Stream
API处理二进制数据; TextWriter
API处理文本数据。 (并StreamWriter
为您执行该文本到二进制转换。)