Ich verwende TcpClient-Klasse, um eine Telnet-Verbindung zu implementieren. Was ich nicht weiß, ist, wie man das Ende der Antwort bestimmt. Es scheint, dass, sobald DataAvailable Eigenschaft wahr ist, ich die Daten aus Stream lesen und DataAvailable wird vorübergehend auf false festgelegt, während Puffer mit einem weiteren Datenblock gefüllt wird, aber ich denke, dass alle gelesen und weggehen. Wie stelle ich sicher, dass alle Antworten gelesen wurden?Wie mit Verzögerungen bei Telnet-Verbindung programmgesteuert umgehen?
Sie könnten mir raten, wie Sie das Code-Snippet unten ändern können, damit dies richtig funktioniert. Es funktioniert ordnungsgemäß, wenn ich den Code durchtrete, da genügend Zeit für das Abrufen der gesamten Antwort vorhanden ist. Schätze deine Hilfe.
if (this.Stream.DataAvailable)
{
readBuffer = new Byte[this.Client.ReceiveBufferSize];
do
{
// read data
bytes = this.Stream.Read(readBuffer, 0, readBuffer.Length);
Thread.Sleep(10);
responseData = String.Concat(responseData, System.Text.Encoding.ASCII.GetString(readBuffer, 0, bytes));
} while (this.Stream.DataAvailable);
allDataRead = true;
break;
}
Es ist eine Verbindung zum Telnet-Server mit tcp/ip-Socket und Port 23. Der Server beendet die Verbindung nicht. Der erste Teil der Telnet-Sitzung ist die Authentifizierung, wenn der Server nach dem ersten Benutzernamen und dann nach dem Kennwort fragt. Ich werde das Trennzeichen überprüfen und Sie später informieren. Vielen Dank. – David
Angenommen, der Telnet-Server ist eine Konsolensitzung nach einem Unix/BSD/Windows/etc. Server, dann können Sie den Eingabeaufforderungstext als Trennzeichen verwenden. –