Завершение асинхронного сервера - C#
Формулировка задачи:
Есть форма в которой асинхронный сервер запускается и останавливается. Когда нажимаю старт сервер запускается, всё написано так:
но когда нажимаю кнопку стоп он продолжает работу.
При нажатии на стоп Form1.status = false.
Так я немогу понять почему он продолжает работу. Помогите.
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"); } }
Решение задачи: «Завершение асинхронного сервера»
textual
Листинг программы
while (true) { if (Form1.status == true) { acceptEvent.Reset(); this.socket.BeginAccept(new AsyncCallback(AcceptCallBack), this.socket); acceptEvent.WaitOne(); } else { Disconnect(); return; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д