socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage),socket);
public static void ReceiveMessage(IAsyncResult ar) { try { var socket = ar.AsyncState as Socket; //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.endreceive.aspx var length = socket.EndReceive(ar); //读取出来消息内容 var message = Encoding.Unicode.GetString(buffer, 0, length); //显示消息 Console.WriteLine(message); //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了) socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket); } catch(Exception ex){ Console.WriteLine(ex.Message); } }
个人理解,不会形成线程套嵌的,比如一开始,主线程执行第一行代码后,就直接执行下一行了,至于异步返回的方法就是另一个线程执行了,你可以执行一下方法试试看,你在每个方法里consolo.write出来当前执行的线程名称,就明白了
真心谢谢。。。。。