首页 新闻 会员 周边

Socket.BeginAccept问题请教

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-07 14:07

关于Socket.BeginAccept msdn的例子如下:


 IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);

       Socket s = new Socket(lep.Address.AddressFamily,
                                  SocketType.Stream,
                                         ProtocolType.Tcp);
       try{
            s.Bind(lep);
            s.Listen(1000);

            while(true){
                 allDone.Reset();

                 Console.WriteLine("Waiting for a connection...");
                 s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_Callback), s);

                 allDone.WaitOne();
            }
       }
       catch (Exception e){
            Console.WriteLine(e.ToString());
       }

在这个例子中使用ManualResetEvent.WaitOne()来阻塞原始线程,然后在回调方法中调用Set方法。

我比较疑惑的方面是,如果我同时使用两个Socket,绑定不同端口,一个用了接受一般用户的连接;一个用来接受管理员的连接。在这个时候是不是如果使用ManualResetEvent.WaitOne()话,原始线程被阻止后,两个socket都能接受客户端的连接么?还是只有一个可以接受客户端的连接,如果只有一个可以接收,这种情况怎么处理?

洞庭夕照的主页 洞庭夕照 | 初学一级 | 园豆:129
提问于:2012-09-06 14:08
< >
分享
最佳答案
1

allDone.WaitOne(); 表示等待一个,你可以使用 WaitMany()来等待多个句柄。也就是创建两个 ManualResetEvent,然后用WaitMany来等待其中任何一个。

收获园豆:10
Launcher | 高人七级 |园豆:45045 | 2012-09-06 14:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册