C# 异步服务器套接字定义?
有人能解释一下c#中的异步套接字吗?我刚刚遵循了MSDN的示例,下面是我的部分代码:C# 异步服务器套接字定义?,c#,sockets,asynchronous,C#,Sockets,Asynchronous,有人能解释一下c#中的异步套接字吗?我刚刚遵循了MSDN的示例,下面是我的部分代码: public void Start() { serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(new IPEndPoint(IPAddress.Any, port)); serverSocket.SetSocketOp
public void Start()
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 10000);
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 10000);
serverSocket.Listen(1000);
while (!stop)
{
Console.WriteLine("Server Thread #" + Thread.CurrentThread.ManagedThreadId);
allDone.Reset();
serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
allDone.WaitOne();
}
}
private void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
Socket serverSocket = (Socket)ar.AsyncState;
Socket clientSocket = serverSocket.EndAccept(ar);
Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000); <----- All request is stopped, no response returned.
// ....
}
public void Start()
{
serverSocket=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
绑定(新的IPEndPoint(IPAddress.Any,port));
serverSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,10000);
serverSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeout,10000);
serverSocket.Listen(1000);
当(!停止)
{
Console.WriteLine(“服务器线程#”+Thread.CurrentThread.ManagedThreadId);
全部完成。重置();
BeginAccept(新的异步回调(AcceptCallback),serverSocket);
全部完成。WaitOne();
}
}
私有void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
套接字服务器套接字=(套接字)ar.AsyncState;
Socket clientSocket=serverSocket.EndAccept(ar);
Console.WriteLine(“客户端线程#”+Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000);只要你打电话给
Socket clientSocket = serverSocket.EndAccept(ar);
您需要在服务器套接字上再次调用beginacept
方法
因此,函数将如下所示:
private void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
Socket serverSocket = (Socket)ar.AsyncState;
Socket clientSocket = serverSocket.EndAccept(ar);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000);
// ....
}
只要你打电话给
Socket clientSocket = serverSocket.EndAccept(ar);
您需要在服务器套接字上再次调用beginacept
方法
因此,函数将如下所示:
private void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
Socket serverSocket = (Socket)ar.AsyncState;
Socket clientSocket = serverSocket.EndAccept(ar);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000);
// ....
}
同样,在这种情况下,在Start()
方法中不需要while(!stop)
,只需要某种等待来确保主线程不会终止。否则,接受新连接有两点不明显。同样,在这种情况下,在Start()中不需要while(!stop)
method,只是某种等待,以确保主线程不会终止。否则,接受新连接有两点是不明显的。