本帖最后由 zxh0327 于 2014-11-02 00:34:04 编辑

解决方案 »

  1.   

    意思就是收到一个连接请求的时候就要开始等下一个连接请求。否则就只能处理一个请求了。这个AcceptCallback是在收到连接请求时才被调用的,不是执行BeginAccept的时候。还有另一种方式,见msdn的异步socket server的例子http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx,这是用while(true)的方式来循环BeginAccept,然后用一个ManualResetEvent来控制在收到一个请求的时候才继续循环,意思是一样的,不过这种方式要多用一个线程来while。
      

  2.   


    确实会“调用了一次BeginAccept函数”,但是“下一次调用”不会立刻发生,不存在“不断地执行”的可能性。这个BeginAccept只是注册一个回调方法,并不会执行回调方法。所以这里不存在什么“递归、循环”的问题。
      

  3.   

    BeginAccept是给listener注册一个监听事件,并不是立即执行。直到侦听到连接请求,才执行AcceptCallback。
    执行AcceptCallback,启动下一次监听,直到下一次收到连接请求
      

  4.   


    原来如此,我以为AcceptCallback是立刻执行的