0

所以我无法读取通过 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[]

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

4

1 回答 1

2

问题是你在打电话

writer.Write(bytes);

这反过来又调用-TextWriter.Write(object)它只是调用ToString(). byte[]ToString()调用将返回System.Byte[]

创建 a 的StreamWriter目的是您可以编写文本

writer.Write("connect");

所以你根本不需要给自己打电话Encoding.GetBytes()。但是,如果您真的只想通过套接字发送 ASCII,则应在创建时明确指定StreamWriter

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

当然,另一种选择是您不必费心 a StreamWriter,并直接将字节发送到流中。不过,了解其中的区别很重要:StreamAPI 处理二进制数据;TextWriterAPI 处理文本数据。(并StreamWriter为您执行该文本到二进制转换。)

于 2013-02-01T06:50:55.353 回答