C# 从TcpClient读取字符串
因此,我无法读取通过Tcp流发送的字符串。我正在使用此代码发送C# 从TcpClient读取字符串,c#,tcp,stream,byte,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 getConnection
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[]
它不应该返回字符串吗?我做错了什么?问题是你在打电话
writer.Write(bytes);
它依次调用-它只调用字节[]
上的ToString()
。该ToString()
调用将返回System.Byte[]
创建StreamWriter
的要点是您可以编写文本:
因此,您根本不需要自己调用Encoding.GetBytes()
。但是,如果您真的只想在套接字下发送ASCII,则在创建StreamWriter
时应明确指定:
StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);
当然,另一种选择是,您不必麻烦使用StreamWriter
,而是直接沿流发送字节。不过,理解其中的区别很重要:流
API处理二进制数据;TextWriter
API处理文本数据。(并且StreamWriter
为您执行文本到二进制的转换。)
StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);