sktListener 是socket类型
AsyncCallback aCallback = new AsyncCallback(AcceptCallback);
其中AcceptCallBack如下:
public static void AcceptCallback(IAsyncResult ar)
{
Console.WriteLine("AcceptCallback Thread ID:" +AppDomain.GetCurrentThreadId()); // retrieved the socket
Socket listener = (Socket)ar.AsyncState;
// new socket
Socket handler = listener.EndAccept(ar);//sktListener就不管以后的处理?
handler.BeginReceive(buffer,0, buffer.Length, 0, new AsyncCallback(Receive),
handler);
}
问:
当执行sktListener.BeginAccept( aCallback,sktListener);到socket handler =....
这一步的时候就将处理交给handler,而sktListener就回去继续侦听?
如果还有连接传入的话就再次调用如上过程?也就是自己不用写循环了?我编码测试过,两个客户端是可以连上服务器,但服务器的Console.WriteLine(...)所显
示的信息却只有一遍,这是为什么啊?
AsyncCallback aCallback = new AsyncCallback(AcceptCallback);
其中AcceptCallBack如下:
public static void AcceptCallback(IAsyncResult ar)
{
Console.WriteLine("AcceptCallback Thread ID:" +AppDomain.GetCurrentThreadId()); // retrieved the socket
Socket listener = (Socket)ar.AsyncState;
// new socket
Socket handler = listener.EndAccept(ar);//sktListener就不管以后的处理?
handler.BeginReceive(buffer,0, buffer.Length, 0, new AsyncCallback(Receive),
handler);
}
问:
当执行sktListener.BeginAccept( aCallback,sktListener);到socket handler =....
这一步的时候就将处理交给handler,而sktListener就回去继续侦听?
如果还有连接传入的话就再次调用如上过程?也就是自己不用写循环了?我编码测试过,两个客户端是可以连上服务器,但服务器的Console.WriteLine(...)所显
示的信息却只有一遍,这是为什么啊?
_svrSock.BeginAccept(new AsyncCallback( AcceptConn ), _svrSock);
你在这个函数中,还要加上面这一句,继续接收连接,否则它只能接收一个连接就停了。
具体看:http://dev.csdn.net/develop/article/65/65798.shtm