TCPListener в форме Windows - PullRequest
       11

TCPListener в форме Windows

0 голосов
/ 07 сентября 2018

Я пытаюсь написать прослушиватель TCP, который может подключаться к нескольким клиентам и отправлять и получать данные.Часть моего кода -

Вызывающий сервер -

private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'cresijCamDataSet1.CentralControl' table. You can move, or remove it, as needed.
        this.centralControlTableAdapter1.Fill(this.cresijCamDataSet1.CentralControl);

         s = new Server();
        Thread th = new Thread(s.Run);
        th.Start();
    }

Метод запуска -

public async void Run()
    {
         tcp = new TcpListener(IPAddress.Any, 1200);

        tcp.Start();
        while (true)
        {
            try
            {
                TcpClient client = await tcp.AcceptTcpClientAsync();

                Thread th = new Thread(()=>{
                   Process(client);
                  }) ;   
            }
            catch (Exception ex)
            {
                string m = ex.Message;
            }
        }
    }

private async Task Process(TcpClient tcpClient)
        {

            bool hasItem = clients.Contains(tcpClient);
            if(hasItem == false)
            {
                clients.Add(tcpClient);
            }
            IPEndPoint iPEndPoint =(IPEndPoint) tcpClient.Client.RemoteEndPoint;

            string ip = ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString();
            NetworkStream stream = tcpClient.GetStream();
            byte[] receivedBytes = new byte[tcpClient.ReceiveBufferSize];


            stream.Read(receivedBytes, 0, receivedBytes.Length);

                f.UpdateData(receivedBytes, ip);
 }

Метод отправителя для отправки данных -

 public void Sender(byte[] data, TcpClient client)
        {
            NetworkStream stream = client.GetStream();
            stream.Write(data, 0, data.Length);

        }

Как вы видите, я вызвал метод Run () в formLoad.Но все это не работает, так как я не очень разбираюсь в потоках.

Этот метод не является непрерывным.Сервер не всегда слушает клиентов.Может кто-то помочь мне с этим.Мне нужен асинхронный слушатель TCP, который может прослушивать входящие клиенты, и это тоже в форме Windows.Консольный сервер у меня есть.

...