1
有人可以解释在c#中的异步套接字?我只是跟着从MSDN样本,这里是我的代码部分:C#异步服务器套接字定义?
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.
// ....
}
我把“Thread.sleep代码(100000)”后serverSocket.EndAccept,我发现了剩余的请求不被接受。这是示例输出:
- 如果Thread.sleep代码(100000)被禁用/评论的,控制台显示:
- 服务器线程#10
- 客户线程#11
- 服务器线程# 10
- 客户线程#11
- 服务器线程#10
- 客户线程#11
- 等等...
- 如果Thread.sleep代码(100000)已启用,控制台显示:
- 服务器线程#10
- 客户线程#11
- ...没有在第一个请求完成之前接受其他客户端请求。
对这种情况的任何解释?由于
此外,在这种情况下,你不需要'而(停止!)'在'开始()'方法,只是某种等待保证主线程不终止。否则,你会有两点接受不明显的新连接。 –