2013-06-20 28 views
1

我开发一个服务器和使用telnet连接的设备之间的双向对话。 我想等待发送下一个命令之前得到读缓冲区。 我tryed使用此:的TcpClient流streamReader.ReadToEnd()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); 
} 

但目前看来,ReadToEnd的()不能正常工作。如果我使用Read()(单字节),我可以收到一些东西。

回答

2

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

您应该使用的ReadLine读取和处理在一次一行,或者使用读出数据块以块读取数据。