Ejemplo n.º 1
0
        private void CloseConnection(SocketCloseReason closeReason)
        {
            try
            {
                AsynSocketSession session = SocketAsyncEventArgs.UserToken as AsynSocketSession;
                if (session != null)
                {
                    Socket socket = session.Client;
                    socket.SafeCloseSocket();
                    session.SocketConection.SocketAsyncEventArgs.AcceptSocket.SafeCloseSocket();
                    session.SocketConection.SocketAsyncEventArgs.ConnectSocket.SafeCloseSocket();
                }
                SocketAsyncEventArgs.Completed -= ReceivedCompleted;
                if (OnSocketDisconnected != null)
                {
                    OnSocketDisconnected(this, new SocketClientClosedEventArgs(this, closeReason));
                }

                Thread.Sleep(2000);
                SocketAsyncEventArgs.UserToken = null;
                SocketAsyncEventArgs.SetBuffer(null, 0, 0);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Ejemplo n.º 2
0
 public void Send(AsynSocketSession recvDataClient, byte[] datagram)
 {
     try
     {
         recvDataClient.Client.BeginSend(datagram, 0, datagram.Length, SocketFlags.None,
                                         new AsyncCallback(SendDataEnd), recvDataClient.Client);
     }
     catch (Exception ee)
     {
         m_logger.LogError("TCP链路异常-数据发送异常,解析模块{0}", m_anayticename);
     }
 }
Ejemplo n.º 3
0
        public AsynSocketConnection(Socket socket, SocketAsyncEventArgs args)
        {
            //Server = server;
            Client = socket;
            AsynSocketSession session = new AsynSocketSession(this);

            SocketAsyncEventArgs            = args;
            SocketAsyncEventArgs.Completed += ReceivedCompleted;
            SocketAsyncEventArgs.UserToken  = session;
            Connect = true;
            Number  = 0;
            ListenForData(SocketAsyncEventArgs);
        }
Ejemplo n.º 4
0
        private void ReceivedCompleted(object sender, SocketAsyncEventArgs e)
        {
            try
            {
                if (!Connect)
                {
                    // CloseConnection(SocketCloseReason.SocketError);
                    return;
                }
                if (e.BytesTransferred == 0)
                {
                    CloseConnection(SocketCloseReason.SocketError);
                    return;
                }

                if (e.SocketError != SocketError.Success)
                {
                    CloseConnection(SocketCloseReason.SocketError);
                    return;
                }

                AsynSocketSession session = e.UserToken as AsynSocketSession;

                Byte[] data = new Byte[e.BytesTransferred];
                Array.Copy(e.Buffer, e.Offset, data, 0, data.Length);

                if (OnDataReceived != null)
                {
                    LastReceivedTime = DateTime.Now;
                    OnDataReceived(this, new SocketDataEventArgs()
                    {
                        Session = e.UserToken as AsynSocketSession,
                        Data    = data
                    });
                }

                ListenForData(e);
            }
            catch (Exception ex)
            {
                throw;
            }
        }