Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将网络流转换为字符串时获取垃圾值_C# - Fatal编程技术网

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

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

我使用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服务器,在我的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解码,但输出仍然是垃圾邮件。上面的代码帮助我过滤掉缓冲区中的空值,但仍然为解码的字符串提供垃圾邮件值。