C# 将网络流转换为字符串时获取垃圾值
我使用Telnet协议从服务器PC读取文本文件。但当我尝试将网络流转换为sting时,它给出了一些垃圾值。这里的问题是什么C# 将网络流转换为字符串时获取垃圾值,c#,C#,我使用Telnet协议从服务器PC读取文本文件。但当我尝试将网络流转换为sting时,它给出了一些垃圾值。这里的问题是什么 NetworkStream ns = tcpclient.GetStream(); StreamReader streamReader = new StreamReader(ns); StreamWriter streamWriter = new StreamWriter(ns); byte[] bytes = new byte[tcpclient.ReceiveBuffe
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服务器,在我的pc中启用客户端。
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);
TcpClient TcpClient=new TcpClient();
tcpclient.Connect(,);
NetworkStream ns=tcpclient.GetStream();
StreamReader StreamReader=新的StreamReader(ns);
byte[]msg=Encoding.ASCII.GetBytes(“类型”);
string returnd=Encoding.ASCII.GetString(msg);
ns.Write(msg,0,msg.Length);
StreamWriter StreamWriter=new St
字节[]字节=新字节[tcpclient.ReceiveBufferSize];
int bytesread=tcpclient.ReceiveBufferSize;
ns.Read(字节,0,字节读取);打字机(ns);
string returndata=Encoding.ASCII.GetString(字节);
但是我的代码总是提供一些垃圾输出,比如“ÿÿ%ÿÿÿÿÿÿÿÿ”
ReceiveBufferSize
是接收缓冲区的大小,但是当您读取时,并不总是得到一个完整的缓冲区。Read
方法返回读取的实际字节数,您应该使用该值来限制要解码的缓冲区部分:
byte[] bytes = new byte[tcpclient.ReceiveBufferSize];
int nRead = ns.Read(bytes, 0, tcpclient.ReceiveBufferSize);
string returndata = Encoding.ASCII.GetString(bytes, nRead);
尝试对服务器发送的流进行Base64解码,然后再尝试将其转换为字符串。尝试了Base64解码,但输出仍然是垃圾邮件。上面的代码帮助我过滤掉缓冲区中的空值,但仍然为解码的字符串提供垃圾邮件值。