Завершение асинхронного сервера - C#

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

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

Есть форма в которой асинхронный сервер запускается и останавливается. Когда нажимаю старт сервер запускается, всё написано так:
public void StartClient()
        {
            server Server = new server(this.IP, this.port);
            if (ConnectServer() == true)
            {
                Server.Init();
            }
            else
                Error.Connect();
            return;
        }
class server
    {
        private Socket socket;
        private IPEndPoint ip;
        private ManualResetEvent acceptEvent = new ManualResetEvent(false);
 
        //создание сокета
        public server(string ip, int port)
        {
            this.ip = new IPEndPoint(IPAddress.Parse(ip), port);
            this.socket = new Socket(this.ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
        }
 
        //ставим сокет в режиме прослушивания
        public void Init()
        {
            this.socket.Bind(this.ip);
            this.socket.Listen((int)SocketOptionName.MaxConnections);
            StartListening();
        }
 
        private void StartListening()
        {
            Console.WriteLine("server start...");
            Form1.status = true;
            while (true)
            {
                if (Form1.status == true)
                {
                    acceptEvent.Reset();
                    this.socket.BeginAccept(new AsyncCallback(AcceptCallBack), this.socket);
                    acceptEvent.WaitOne();
                }
                else
                {
                    Disconnect();
                    return;
                }
            }
        }
 
        private void AcceptCallBack(IAsyncResult ar)
        {
            Socket socket = (Socket)ar.AsyncState;
            Socket accept_socket = socket.EndAccept(ar);
            acceptEvent.Set();
            ServerHandle handle = new ServerHandle(accept_socket);
            handle.Start();
            socket.BeginAccept(new AsyncCallback(AcceptCallBack), this.socket);
        }
 
        public void Disconnect()
        {
            this.socket.Close();
           // this.socket.(false, new AsyncCallback(DisconnectCallBack), this.socket);
        }
 
        private void DisconnectCallBack(IAsyncResult ar)
        {
            Socket handler = ar.AsyncState as Socket;
            handler.EndDisconnect(ar);
            Console.WriteLine("Connection closed");
        }
    }
но когда нажимаю кнопку стоп он продолжает работу. При нажатии на стоп Form1.status = false. Так я немогу понять почему он продолжает работу. Помогите.

Решение задачи: «Завершение асинхронного сервера»

textual
Листинг программы
 while (true)
            {
                if (Form1.status == true)
                {
                    acceptEvent.Reset();
                    this.socket.BeginAccept(new AsyncCallback(AcceptCallBack), this.socket);
                    acceptEvent.WaitOne();
                }
                else
                {
                    Disconnect();
                    return;
                }
            }

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


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

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

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