Тайм-аут чтения сетевого потока C# TcpClient – ​​распознавание строки из ReadAsync (Telnet)C#

Место общения программистов C#
Anonymous
Тайм-аут чтения сетевого потока C# TcpClient – ​​распознавание строки из ReadAsync (Telnet)

Сообщение Anonymous »

Я подключаюсь к удаленному серверу Telnet с помощью TcpClient и Networkstream, пока с сервера доставляется ожидаемый ответ, все работает нормально, однако я хотел бы добавить тайм-аут, чтобы перехватить исключение.Это мой текущий код, где я жду «Имя пользователя»

Код: Выделить всё

byte[] buffer = new byte[4096];

string response = "";
int bytesRead;

var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(5000); //does not work as timeout

while (!response.Contains("Username"))
{
try
{
bytesRead = await targetClient.GetStream().ReadAsync(buffer, 0, buffer.Length, cancellationTokenSource.Token);
response += Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Answer from Telnet-Server: {response}");
}
catch
{
Console.WriteLine("catch");
break;
}
}
Если я правильно понимаю функцию ReadAsync - токен отмены не принимается во внимание - так что тайм-аут не может быть добавлен.
Есть ли есть ли возможность добавить тайм-аут? Может быть, какой-то второй рабочий поток, который срабатывает через 5 секунд, и если ответ не содержит «Имя пользователя», я выхожу из цикла while?
Или мне следует изменить ReadAsync на синхронный метод, который поддерживает тайм-аут?Или мне следует считывать все с сервера Telnet в очередь и спрашивать только, содержит ли очередь соответствующее ключевое слово, например «Имя пользователя», это возможно?
Но я думаете, что есть гораздо лучшие подходы, не так ли?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/787 ... -readasync

Вернуться в «C#»