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; } }
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); } }
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); }
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; } }