从 TcpClient 读取字符串



所以我在读取通过 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为您执行文本到二进制的转换。

相关内容

  • 没有找到相关文章

最新更新