我现在写一个Socket的例子,想采用UDPR异步实现,但现在一直会出现一个异常,查了MSDN也找不到有用的信息,请高手指点下。
就是在我调用Socket类的Close()方法后,系统都会进入到接受信息的那个委托函数里面,然后引发一个异常,下面是那个方法:        public void ReceiveComplete(IAsyncResult ar)
        {
            Socket mySocket = (Socket)ar.AsyncState;
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, 0);
            EndPoint remotePoint = (EndPoint)ipPoint;
            int recvBytes=0;
            string messageSend = "Hello,client!this is server!";
            try
            {
                recvBytes = mySocket.EndReceiveFrom(ar, ref remotePoint);
                _mySocket.SendMessage(SendComplete, messageSend, remotePoint);
            }
            catch (Exception)
            {
            }
            string message = Encoding.Unicode.GetString(_buffer, 0, recvBytes);
            //清空缓冲区
            Array.Clear(_buffer, 0, _bufferSize);
            try
            {  
                mySocket.BeginReceiveFrom(_buffer, 0, _bufferSize, SocketFlags.None, ref remotePoint, ReceiveComplete, mySocket);
            }
            catch (Exception)
            {
            }
        }也可能是这个方法写的有问题,总之,请高手指点吧,

解决方案 »

  1.   

     
    当socket关闭时BeginReceiveFrom会引发SocketException 异常。你捕捉一下这个异常然后判断异常代码。 sex.SocketErrorCode是什么。好像就是SocketError.Interrupted,如果等于这个你就做出相应处理就行了。
      

  2.   

    EndReceiveFrom都调用了又调用BeginReceiveFrom,明显不对
      

  3.   


    循环监听 BeginReceiveFrom(_buffer, 0, _bufferSize, SocketFlags.None, ref remotePoint, ReceiveComplete, mySocket);