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

异步SOCKET的两种方法的问题
用多线程进行异步SOCKET挺好理解,就是
1.创建监听
2.Thread _acceptWorkThread = new Thread(AcceptWorkThread);
3.处理回调函数AcceptWorkThread以及回调函数内的回调函数

子线程+回调函数 完成异步SOCKET功能


用异步编程的方法很难理解:
1.先要设置 ManualResetEvent 
public static ManualResetEvent allDone = new ManualResetEvent(false);


然后创建监听并调用监听的回调函数

Socket listener = new Socket(AddressFamily.InterNetwork,
 44             SocketType.Stream, ProtocolType.Tcp);
 45 
 46         // Bind the socket to the local endpoint and listen for incoming connections.
 47         try
 48         {
 49             listener.Bind(localEndPoint);
 50             listener.Listen(100);
 51             while (true)
 52             {
 53                 // Set the event to nonsignaled state.
 54                 allDone.Reset();
 55 
 56                 // Start an asynchronous socket to listen for connections.
 57                 Console.WriteLine("Waiting for a connection");
 58                 listener.BeginAccept(
 59                     new AsyncCallback(AcceptCallback),
 60                     listener);
 61 
 62                 // Wait until a connection is made before continuing.
 63                 allDone.WaitOne();
 64             }
 65         }
 66         catch (Exception e)
 67         {
 68             Console.WriteLine(e.ToString());
 69         }


我想问的是这种方法是不是没有创建子线程?如果没创建子线程那allDone.Reset();allDone.WaitOne();的各种操作控制的是什么线程?

------最佳解决方案--------------------
listener.BeginAccept( 59                     new AsyncCallback(AcceptCallback