Выполнить асинхронное непрерывное чтение из TcpClient - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь прочитать с удаленного сервера, используя TcpClient, и я хочу, чтобы это асинхронно. Я создал стандартный Forms.Timer, который тикает каждую секунду и вызывает функцию с опросами с сервера.

Я могу читать с сервера, то есть мне удается увидеть значения внутри моего buffer

но по какой-то причине я получаю (я предполагаю, что через 5 секунд после Delay)

эта операция не разрешена для неподключенных сокетов

это мое соединение с функцией сервера

        public static async Task<string> readFromPLC()
        {

            using (var client = new System.Net.Sockets.TcpClient())
            {               
                Task connectTask =  client.ConnectAsync(ipAddress, port);
                Task timeoutTask = Task.Delay(millisecondsDelay: 5000);

                if (await Task.WhenAny(connectTask, timeoutTask) == timeoutTask)
                {
                  //  throw new TimeoutException("could not connect to the PLC");
                }

                using (var reader = new System.IO.StreamReader(client.GetStream()))
                {                   
                    char[] buffer = new char[1024];
                    while ((await reader.ReadAsync(buffer, 0, buffer.Length)) > 0)
                    {
                        sb.Append(String.Join("", buffer));
                    }
                    return sb.ToString();
                }
            }
        }

и это моя функция таймера

        private async void readFromPLCTimer_Tick(object sender, EventArgs e)
        {
            string res = String.Empty;
            bool plcStatus = false;
            try
            {
                res = await PLCHelper.readFromPLC();
                plcStatus = true;
            }
            catch (Exception ex)
            {
                res = ex.Message;
            }
            setPLCstatus(plcStatus);
            latestCommandTxtBox.AddLine(res);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...