日期:2014-05-17  浏览次数:20832 次

C# winform异步通信的问题
小弟最近在学习异步编程,一直有个问题搞不清楚。
在服务器端进行异步接受多个客户端的连接时,用到下面语句:
socket.BeginAccept(new AsyncCallBack(Listen_CallBack),socket);
我想问一下这条语句是只能处理一个客户端还是可以处理多个客户端的连接?
例如有一个客户端与服务器建立了连接,系统会调用回调函数,如果又有一个客户端与服务器建立了连接,系统是不是还会调用回调函数?
如果该语句只能处理一个客户端,那么怎样接受多个客户端的链接啊?
求指教啊!

------解决方案--------------------
这条语句只能处理一次客户端的连接请求,
所以你要在Listen_CallBack里重新BeginAccept,
就可以处理多个客户端的连接请求了
------解决方案--------------------
#2正解,你要在回调函数socket.BeginAccept(new AsyncCallBack(Listen_CallBack),socket);
Listen_CallBack中重新指定一个新的socket来接收连接
回调函数中比如这样写

private void Listen_CallBack(IAsyncResult ar)
{
Socket Rsocket=socket.EndAccept(ar);
//现在Rsocket接收到连接了。你想要异步接到信息就写Rsocket.BeginReceive...
//其它你想加的代码。比如获取远程连接的客户端的RemoteEndPoint 信息
socket.BeginAccep(new AsyncCallBack(Listen_CallBack),null);//主socket接着等待连接
}