Многопоточное серверное приложение на C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте практикуюсь в написании клиент серверного приложения. С помощью MSDN пытаюсь написать сервер который будет работать в отдельном потоке и слушать определенный порт до подключения к нему. Зачем делаю в отдельном потоке? для того чтобы окно формы было активно и я мог бы прервать работу сервера. вот что у меня получилось
public Server()
        {
     
            myThread = new Thread(StartListening);
        }
        public void Start()
        {
            myThread.Start();
        }
        public void Stop()
        {
            myThread.Join();
            listener.Close(50);
            Cool = false;
        }
        public  string data = null;
 
        public  void StartListening()
        {
            // Data buffer for incoming data.
            byte[] bytes = new Byte[1024];
 
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
 
            // Create a TCP/IP socket.
             listener = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            try
            {
                
                listener.Bind(localEndPoint);
                listener.Listen(10);
 
                // Start listening for connections.
                while (Cool)
                {
                    MessageBox.Show("Waiting for a connection...");
                    
                    Socket handler = listener.Accept();
                    data = null;
 
                    // An incoming connection needs to be processed.
                    while (true)
                    {
                        bytes = new byte[1024];
                        int bytesRec = handler.Receive(bytes);
                        data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                        if (data.IndexOf("<EOF>") > -1)
                        {
                            break;
                        }
                    }

                  MessageBox.Show("Text received : {0}", data);
 
                    // Echo the data back to the client.
                    byte[] msg = Encoding.ASCII.GetBytes(data);
 
                    handler.Send(msg);
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
 
            }
            catch (Exception e)
            {
              
            }
 
        }
Но как правильно мне написать ту заветную кнопочку по остановке потока. Если в тупую завершить поток. Метод StartListening все равно будет выполняться собственно вопрос в следующем как мне остановить сервер или как правильно его сделать чтоб была возможность остановки. Сервер нужен для передачи данных между 2 програмами.

Решение задачи: «Многопоточное серверное приложение на C#»

textual
Листинг программы
 Socket handler = listener.Accept();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы