Почему я получаю это в своем методе 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
Этот ответ означает, что вы не ждали звонка.