/// <summary> /// 接收数据通知函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private bool SocketReceived(object sender, SocketAsyncEventArgs e) { SocketListener sl = sender as SocketListener; TCPInPacket tcpInPacket = null; Socket s = (e.UserToken as AsyncUserToken).CurrentSocket; lock (dictInPackets) //锁定接收包队列 { if (!dictInPackets.TryGetValue(s, out tcpInPacket)) { tcpInPacket = tcpInPacketPool.Pop(s, TCPCmdPacketEvent); dictInPackets[s] = tcpInPacket; } } //处理收到的包 if (!tcpInPacket.WriteData(e.Buffer, e.Offset, e.BytesTransferred)) { //LogManager.WriteLog(LogTypes.Error, string.Format("接收到非法数据长度的tcp命令, 需要立即端断开!")); //socketListener.CloseSocket(tcpInPacket.CurrentSocket); return(false); } return(true); }
private void SocketReceived(IAsyncResult iar) { if (null == _Socket) { return; } try { SocketError socketError = SocketError.Success; int recvLength = _Socket.EndReceive(iar, out socketError); byte[] bytesData = iar.AsyncState as byte[]; if (recvLength <= 0) { return; } //处理收到的包 if (!_MyTCPInPacket.WriteData(bytesData, 0, recvLength)) { //TODO 处理包异常通知 return; } if (_Socket.Connected) { _Socket.BeginReceive(bytesData, 0, bytesData.Length, SocketFlags.None, new AsyncCallback(SocketReceived), bytesData); } } catch (Exception e) { MainWindow.GetInstance().ShowText(e.ToString()); } }
/// <summary> /// 接收数据通知函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private bool SocketReceived(object sender, SocketAsyncEventArgs e) { try { SocketListener sl = sender as SocketListener; TCPInPacket tcpInPacket = null; AsyncUserToken userToken = (e.UserToken as AsyncUserToken); TMSKSocket s = userToken.CurrentSocket; if (GameManager.FlagOptimizeLock) { tcpInPacket = s._TcpInPacket; if (null == tcpInPacket) { lock (dictInPackets) //锁定接收包队列 { if (!dictInPackets.TryGetValue(s, out tcpInPacket)) { tcpInPacket = tcpInPacketPool.Pop(s, TCPCmdPacketEvent); dictInPackets[s] = tcpInPacket; } } s._TcpInPacket = tcpInPacket; } } else { lock (dictInPackets) //锁定接收包队列 { if (!dictInPackets.TryGetValue(s, out tcpInPacket)) { tcpInPacket = tcpInPacketPool.Pop(s, TCPCmdPacketEvent); dictInPackets[s] = tcpInPacket; } } } //处理收到的包 if (!tcpInPacket.WriteData(e.Buffer, e.Offset, e.BytesTransferred)) { SysConOut.WriteLine(string.Format("接收到非法数据长度的tcp命令, 需要立即断开! {0} {1}", e.Offset, e.BytesTransferred)); //LogManager.WriteLog(LogTypes.Error, string.Format("接收到非法数据长度的tcp命令, 需要立即断开!")); return(false); } } catch (Exception ex) { SysConOut.WriteLine("SocketReceived 异常-------------------" + ex.Message); } return(true); }
private bool SocketReceived(object sender, SocketAsyncEventArgs e) { SocketListener sl = sender as SocketListener; TCPInPacket tcpInPacket = null; Socket s = (e.UserToken as AsyncUserToken).CurrentSocket; lock (this.dictInPackets) { if (!this.dictInPackets.TryGetValue(s, out tcpInPacket)) { tcpInPacket = this.tcpInPacketPool.Pop(s, new TCPCmdPacketEventHandler(this.TCPCmdPacketEvent)); this.dictInPackets[s] = tcpInPacket; } } return(tcpInPacket.WriteData(e.Buffer, e.Offset, e.BytesTransferred)); }