在将网络流转换为字符串时获取垃圾值

时间:2014-04-04 06:46:08

标签: c#

我正在使用Telnet协议从服务器PC读取文本文件。但是当我尝试将网络流转换为sting时,它会给出一些垃圾值。这会是什么问题?

NetworkStream ns = tcpclient.GetStream();
StreamReader streamReader = new StreamReader(ns);
StreamWriter streamWriter = new StreamWriter(ns);
byte[] bytes = new byte[tcpclient.ReceiveBufferSize];
int bytesread = tcpclient.ReceiveBufferSize;
ns.Read(bytes, 0, bytesread);
string returndata = Encoding.ASCII.GetString(bytes);

我试图通过命令提示符读取文本文件。使用以下步骤 1.在我的电脑中启用服务器pc和客户端中的telnet服务器。 2.将服务器pc中的telnet端口更改为24 3.使用telnet命令连接到服务器pc。 4.从telnet窗口>使用类型在命令提示符下显示文本文件的内容。

现在我想从我的c#代码中做同样的事情。我写了以下代码:

TcpClient tcpclient = new TcpClient();
tcpclient.Connect(<ip address>, <port>);
NetworkStream ns = tcpclient.GetStream();
StreamReader streamReader = new StreamReader(ns);
byte[] msg = Encoding.ASCII.GetBytes("type <file location>");
string returnd = Encoding.ASCII.GetString(msg);
ns.Write(msg, 0, msg.Length);
StreamWriter streamWriter = new St
byte[] bytes = new byte[tcpclient.ReceiveBufferSize];
int bytesread = tcpclient.ReceiveBufferSize;
ns.Read(bytes, 0, bytesread);reamWriter(ns);
string returndata = Encoding.ASCII.GetString(bytes);

但我的代码总是提供一些垃圾输出,如“ÿý%ÿûÿûÿý'ÿýýý”

1 个答案:

答案 0 :(得分:0)

ReceiveBufferSize是接收缓冲区的大小,但是当您阅读时,并不总是获得完整的缓冲区。 Read方法返回读取的实际字节数,您应该使用它来限制要解码的缓冲区部分:

byte[] bytes = new byte[tcpclient.ReceiveBufferSize];
int nRead = ns.Read(bytes, 0, tcpclient.ReceiveBufferSize);
string returndata = Encoding.ASCII.GetString(bytes, nRead);