예제 #1
0
 public SocketManager(int BuffSize)
 {
     _listSocketInfo        = new Dictionary <string, StateObjectSocketServer>();
     _stateInfo             = new StateObjectSocketServer();
     _stateInfo.BUFFER_SIZE = BuffSize;
     _stateInfo.buffer      = new byte[BuffSize];
 }
예제 #2
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObjectSocketServer state = (StateObjectSocketServer)ar.AsyncState;
                if (state.workSocket.Connected)
                {
                    int bytesRead = state.workSocket.EndReceive(ar);
                    if (bytesRead > 0)
                    {
                        if (OnReceiveMsg != null)
                        {
                            OnReceiveMsg(state.buffer, state.workSocket.RemoteEndPoint.ToString());
                        }

                        // Get the rest of the data.
                        state.workSocket.BeginReceive(state.buffer, 0, StateObjectSocketServer.BUFFER_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                    }
                }
                else
                {
                    _listSocketInfo.Remove(state.workSocket.RemoteEndPoint.ToString());
                }
            }
            catch
            {
            }
        }
예제 #3
0
 private void AcceptCallback(IAsyncResult ar)
 {
     try
     {
         if (_ConnectedSwitch == false)
         {
             return;
         }
         else
         {
             _NewSocket_Event.Set();
             // Get the socket that handles the client request.
             Socket listener = (Socket)ar.AsyncState;
             StateObjectSocketServer state = new StateObjectSocketServer();
             if (_ConnectedSwitch == false)
             {
                 //return;
             }
             state.workSocket = listener.EndAccept(ar);
             // Create the state object.
             _listSocketInfo.Add(state.workSocket.RemoteEndPoint.ToString(), state);
             if (OnConnected != null)
             {
                 OnConnected(state.workSocket.RemoteEndPoint.ToString());
             }
             state.workSocket.BeginReceive(state.buffer, 0, StateObjectSocketServer.BUFFER_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
         }
     }
     catch
     {
     }
 }
예제 #4
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            StateObjectSocketServer state = (StateObjectSocketServer)ar.AsyncState;

            try
            {
                if (state.workSocket.Connected)
                {
                    int bytesRead = state.workSocket.EndReceive(ar);
                    if (bytesRead > 0)
                    {
                        if (_listSocketInfo.ContainsKey(state.workSocket.RemoteEndPoint.ToString()))
                        {
                            _listSocketInfo[state.workSocket.RemoteEndPoint.ToString()].LatestRecTime   = CurrentUnixTime();
                            _listSocketInfo[state.workSocket.RemoteEndPoint.ToString()].hasReceivedData = true;
                        }
                        if (OnReceiveMsg != null)
                        {
                            OnReceiveMsg(state.buffer, state.workSocket.RemoteEndPoint.ToString());
                        }
                        Array.Clear(state.buffer, 0, _stateInfo.BUFFER_SIZE);
                        // Get the rest of the data.
                        state.workSocket.BeginReceive(state.buffer, 0, _stateInfo.BUFFER_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                    }
                    else
                    {
                        //收到数据为0 那么判断需要Remove并且断开连接。
                        if (_listSocketInfo.ContainsKey(state.workSocket.RemoteEndPoint.ToString()))
                        {
                            _listSocketInfo[state.workSocket.RemoteEndPoint.ToString()].isConnect = false;
                        }
                    }
                }
                else
                {
                    //收到的Call Back时已经断开连接
                    _listSocketInfo[state.workSocket.RemoteEndPoint.ToString()].workSocket = null;
                }
            }
            catch (Exception ex)
            {
                //收到数据为0 那么判断需要Remove并且断开连接。
                logger.Error(ex.ToString());
                if (_listSocketInfo.ContainsKey(state.workSocket.RemoteEndPoint.ToString()))
                {
                    _listSocketInfo[state.workSocket.RemoteEndPoint.ToString()].isConnect = false;
                }
            }
        }
예제 #5
0
 private void AcceptCallback(IAsyncResult ar)
 {
     try
     {
         if (_ConnectedSwitch == false)
         {
             return;
         }
         else
         {
             _NewSocket_Event.Set();
             // Get the socket that handles the client request.
             Socket listener = (Socket)ar.AsyncState;
             StateObjectSocketServer state = new StateObjectSocketServer();
             state.BUFFER_SIZE = _stateInfo.BUFFER_SIZE;
             state.buffer      = new byte[_stateInfo.BUFFER_SIZE];
             if (_ConnectedSwitch == false)
             {
                 return;
             }
             state.workSocket    = listener.EndAccept(ar);
             state.LatestRecTime = CurrentUnixTime();
             // Create the state object.
             _listSocketInfo.Add(state.workSocket.RemoteEndPoint.ToString(), state);
             if (OnConnected != null)
             {
                 OnConnected(state.workSocket.RemoteEndPoint.ToString());
             }
             state.workSocket.BeginReceive(state.buffer, 0, _stateInfo.BUFFER_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
         }
     }
     catch (Exception ex)
     {
         logger.Error(ex.ToString());
     }
 }