Завершение асинхронного сервера - 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;
}
}