以异步方式接受新套接字的最佳方式是什么。
第一种方式:
while (!abort && listener.Server.IsBound)
{
acceptedSocketEvent.Reset();
listener.BeginAcceptSocket(AcceptConnection, null);
bool signaled = false;
do
{
signaled = acceptedSocketEvent.WaitOne(1000, false);
} while (!signaled && !abort && listener.Server.IsBound);
}
其中 AcceptConnection 应为:
private void AcceptConnection(IAsyncResult ar)
{
// Signal the main thread to continue.
acceptedSocketEvent.Set();
Socket socket = listener.EndAcceptSocket(ar);
// continue to receive data and so on...
....
}
或第二种方式:
listener.BeginAcceptSocket(AcceptConnection, null);
while (!abort && listener.Server.IsBound)
{
Thread.Sleep(500);
}
和 AcceptConnection 将是:
private void AcceptConnection(IAsyncResult ar)
{
Socket socket = listener.EndAcceptSocket(ar);
// begin accepting next socket
listener.BeginAcceptSocket(AcceptConnection, null);
// continue to receive data and so on...
....
}
您最喜欢的方式是什么?为什么?
答案 0 :(得分:1)
我真的很喜欢第二种方式;从接受连接的事件继续“BeginAccept”看起来对我来说更具可读性。您甚至可以将Listening套接字附加到IAsyncResult,并在Accept事件中获取它,以避免使用任何全局变量。