Beispiel #1
0
        protected virtual void ReceiveData(IAsyncResult iar)
        {
            Socket client = (Socket)iar.AsyncState;

            try
            {
                if (_isClose)
                {
                    return;
                }
                int recv = client.EndReceive(iar);
                if (recv > 0)                    //接收到数据
                {
                    agree.NoWait();
                    if (ReceiveOriginalData != null)
                    {
                        try
                        {
                            ReceiveOriginalData(_recvDataBuffer, recv);
                        }
                        catch { }
                    }
                }
                //继续接收来自来客户端的数据
                if (!client.Connected)
                {
                    this.Close();
                    return;
                }
                client.BeginReceive(_recvDataBuffer, 0, _recvDataBuffer.Length, SocketFlags.None,
                                    new AsyncCallback(ReceiveData), client);
            }
            catch (ObjectDisposedException ex)
            {
                OnError(this, ex.Message);
                _isClose = true;
            }
            catch (InvalidOperationException ex)
            {
                OnError(this, ex.Message);
            }
            catch (SocketException)
            {
                if (HandlerClose != null)
                {
                    int hd = this._HandlerID;
                    HandlerClose(this, hd);
                }
                this.Close();
            }
            catch (Exception ex)
            {
                OnError(this, ex.Message);
            }
        }