2014-04-04 48 views
0

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

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); 

,但我的代码总是给喜欢“YY%ÿûÿûÿý'ÿýÿý”一些垃圾输出

+1

试图转换之前尝试通过服务器发送的数据流的Base64编码解码成串。 –

+0

尝试了Base64解码,但输出仍然只是垃圾。 – ash001

回答

0

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

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

上面的代码可以帮助我过滤掉缓冲区中的空值,但仍然会给解码后的字符串赋予垃圾值。 – ash001

相关问题