用于 Telnet 的 TcpClient Stream streamReader.ReadToEnd()

Tob*_*bia 2 c# sockets telnet

我使用 telnet 连接开发服务器和设备之间的双向对话。我想在发送下一个命令之前等待并获取读取缓冲区。我尝试使用这个:

TcpClient tcpClient;
NetworkStream networkStream;
StreamWriter streamWriter;

tcpClient = new TcpClient("10.0.0.51", 23);
networkStream = tcpClient.GetStream();
StreamReader streamReader = new StreamReader(networkStream);
networkStream.ReadTimeout = 500;
while(wline!="exit"){
    Console.Write(streamReader.ReadToEnd());
    Console.Write("next command:");
    wline =Console.ReadLine();
    streamWriter.Write(wline);
}
Run Code Online (Sandbox Code Playgroud)

但似乎 ReadToEnd() 无法正常工作。如果我使用 Read() (单字节)我可以收到一些东西。

Pan*_*vos 5

ReadToEnd 读取所有内容,直到流结束(在网络流的情况下,当该流关闭时发生)。除非另一端的设备关闭流,否则您的客户端无法知道确实没有更多数据可供读取。

您应该使用 ReadLine 一次读取并处理一行,或者使用 ReadBlock 读取块中的数据。