从TcpClient读取字符串

时间:2013-02-01 06:42:36

标签: 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 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 []

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

1 个答案:

答案 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为您执行该文本到二进制转换。)