Member 14544459 Ответов: 1

Почему я получаю это в своем методе wryteasync (): id = 11, status = waitingforactivation, method = "{null}", result = "{еще не вычислено}" ?


Поэтому я хочу создать сервер, который будет отправлять сообщения некоторым клиентам, и клиенты будут выполнять определенный код для каждой команды.
У меня есть следующий код для клиента:
private async Task StartEchoClientAsync()
        {
            try
            {
                using (var tcpClient = new TcpClient("192.168.1.100", 9999))
                {

                    lbEchoClients.Items.Add("TcpClient: " + tcpClient.Client.LocalEndPoint + "created.");
                    var s = tcpClient.GetStream();

                    var data = new byte[1000];
                    var read = new byte[1000];

                    for (var i = 0; i < 120; i++)
                    {
                        await Task.Delay(1000);
                        try
                        {
                            data = Encoding.ASCII.GetBytes("Mesaj");
                            await s.WriteAsync(data, 0, data.Length);
                            data = Encoding.ASCII.GetBytes("");
                        }
                        catch (Exception e)
                        {
                            textBox1.Text += e.ToString();
                        }

                        try
                        {
                            await s.ReadAsync(read, 0, read.Length);
                            byte[] recBuf = new byte[read.Length];
                            Array.Copy(read, recBuf, read.Length);
                            string text = Encoding.ASCII.GetString(recBuf);
                            lbEchoClients.Items.Add("Received Text: " + text);
                            read = Encoding.ASCII.GetBytes("");
                        }
                        catch (Exception e)
                        {
                            textBox1.Text += e.ToString();
                        }
                        
                    }
                    tcpClient.Close();
                }
            }
            catch (Exception e)
            {
                    textBox1.Text += e.ToString();
            }
        }

А следующий код это сервер :
<pre>private async Task StartServerAsync()
        {
            try
            {
                var tcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, 9999));
                tcpListener.Start();

                btnStartServer.Enabled = false;
                Console_textBox.Text += "Serverul este online !\r\n";

                while (true)
                {
                    var tcpClient = await tcpListener.AcceptTcpClientAsync();

                    _ = StartServerSideClient(tcpClient);
                }
            }
            catch(Exception e)
            {
                Console_textBox.Text += ">e.ToString() + "\r\n";
            }
        }
private async Task StartServerSideClient(TcpClient tcpClient)
        {
            Console_textBox.Text += "Client: " + tcpClient.Client.RemoteEndPoint.ToString() + " Connected\r\n";
            var s = tcpClient.GetStream();
            var buffer = new byte[1000];

            int bytesRead = 0;
            int bytesWrote = 0;

            while (true)
            {
                ok = false;
                await s.ReadAsync(buffer, 0, buffer.Length);

                byte[] recBuf = new byte[buffer.Length];
                Array.Copy(buffer, recBuf, buffer.Length);
                string text = Encoding.ASCII.GetString(recBuf);

                if (string.IsNullOrEmpty(text))
                    break;

                bytesRead += recBuf.Length;
                Console_textBox.Text +="Text : " + text + "  -  " + ok;
                switch (ok)
                {
                    case false:
                        byte[] data1 = Encoding.ASCII.GetBytes("command1");
                        var wrt1 = s.WriteAsync(data1, 0, data1.Length);
                        bytesWrote += data1.Length;
                        Console_textBox.Text += " command 1 \r\n";
                        break;
                    case true:
                        byte[] data2 = Encoding.ASCII.GetBytes("comand2");
                        var wrt2 = s.WriteAsync(data2, 0, data2.Length);
                        bytesWrote += data2.Length;
                        Console_textBox.Text += " command 2 \r\n";
                        break;
                }
            }
            
            s.Close();

        }

Так что в var wrt1 = s.WriteAsync(data1, 0, data1.Длина); и в то же время ВАР wrt2 = С. WriteAsync(данные2, 0, данных2.Длина); когда код запускается после отправки первого сообщения он больше не будет отправлять никаких сообщений и обе переменные столкнутся с проблемой которая не убьет программу Id = 11, Status = WaitingForActivation, Method = "{null}", Result = "{еще не вычислено}"Если я делаю это совершенно неправильно, мне очень жаль, но я все еще учусь.

Что я уже пробовал:

Я попытался следовать коду с помощью отладки и попытаться обнаружить проблему, но это не было чем-то очевидным .

Christian Graus

Этот ответ означает, что вы не ждали звонка.

1 Ответов

Рейтинг:
2

Christian Graus

Этот ответ означает, что вы не ждали звонка.


Member 14544459

Как я могу ждать звонка ?

Christian Graus

ты сам это сказал. ждите xxxx().