2013-06-20 4 views
1

Я разрабатываю диалог двунаправленного взаимодействия между сервером и устройством с использованием telnet-соединения. Я хочу подождать и получить буфер чтения перед отправкой следующей команды. я судимое использовать это:TcpClient Stream 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 для чтения и обработки одной строки за раз или использовать ReadBlock для чтения данных в блоках.