byte[] data = new byte[1024];
IAsyncResult ar = net.AcceptedSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, net);
ar.AsyncWaitHandle.WaitOne(500, false);
ISocket s = (ISocket)ar.AsyncState;
int num = s.AcceptedSocket.EndReceive(ar);
byte[] revData = new byte[num];
Array.Copy(data, 0, revData, 0, num);
return revData;
以前我都是写一个回调函数来处理接收的数据,这也是MS官方推荐的,可是现在我想以上述的编程流程处理异步,可以到了int num = s.AcceptedSocket.EndReceive(ar);就非法退出了,任何Exception也没有。这是为什么呢?

解决方案 »

  1.   

    你在这里设置了500MS超时时间,所以这里有可能是超时退出,看看ar.AsyncWaitHandle.WaitOne的返回值,如果是超时退出则继续等待,而不是执行int num = s.AcceptedSocket.EndReceive(ar);
      

  2.   

    while (!ar.AsyncWaitHandle.WaitOne(500, false)) 
    {
          string aa=DateTime.Now.ToString("HH:mm:ss:ffff") + "等待超时" 
           Console.WriteLine(aa);
    }
    //。..
      

  3.   

     byte[] data = new byte[1024];
                    IAsyncResult ar = net.AcceptedSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, net);
                    bool res=ar.AsyncWaitHandle.WaitOne(500,false);
                    byte[] revData = new byte[] { };
                    if(res)
                    {
                        ISocket s = (ISocket)ar.AsyncState;
                        int num = s.AcceptedSocket.EndReceive(ar);
                        revData = new byte[num];
                        Array.Copy(data, 0, revData, 0, num);
                    }
                   
                    return revData;