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

本文关键字:获取 字符串 网络 转换 | 更新日期: 2023-09-27 17:56:48

>我正在使用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 服务器,在我的 pc 中启用客户端。2. 将服务器PC中的telnet端口更改为243. 使用 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);

但是我的代码总是给出一些垃圾输出,例如" ÿý%ÿÿüôÿÿý'ÿýÿý"

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

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

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