public SocketManager(int BuffSize) { _listSocketInfo = new Dictionary <string, StateObjectSocketServer>(); _stateInfo = new StateObjectSocketServer(); _stateInfo.BUFFER_SIZE = BuffSize; _stateInfo.buffer = new byte[BuffSize]; }
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 { } }
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 { } }
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; } } }
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()); } }