private void ProcessReceive(SocketAsyncEventArgs receiver) { if (receiver.LastOperation != SocketAsyncOperation.Receive) { return; } if (receiver.BytesTransferred > 0) { if (receiver.SocketError == SocketError.Success) { int _byteTransferred = receiver.BytesTransferred; string _received = Encoding.Unicode.GetString(receiver.Buffer, receiver.Offset, _byteTransferred); SocketRequestMessage _msg = SocketRequestHandler.GetActualString(_received); if (this.OnMsgReceived != null) { OnMsgReceived((receiver as SocketAsyncEventArgsImpl).UID, _msg); } bool _willRaiseEvent = (receiver.UserToken as Socket).ReceiveAsync(receiver); if (!_willRaiseEvent) { ProcessReceive(receiver); } } } else { this.CloseClientSocket((receiver as SocketAsyncEventArgsImpl).UID, true); } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnReceive(object sender, SocketAsyncEventArgs e) { string msg = Encoding.Unicode.GetString(e.Buffer, 0, e.BytesTransferred); SocketRequestMessage _msgs = SocketRequestHandler.GetActualString(msg); ListenAsync(); if (OnMsgReceived != null) { OnMsgReceived(_msgs); } }
/// <summary> /// 开始监听线程的入口函数 /// </summary> public string Listen(Socket socket = null) { if (socket == null) { socket = (_readWirted.ReceiveSAEA.UserToken as Socket); } byte[] _bytes = new byte[1024]; StringBuilder _sb = new StringBuilder(); int flag = socket.Receive(_bytes, 0, _bytes.Length, SocketFlags.None); string _msg = Encoding.Unicode.GetString(_bytes); _sb.Append(_msg); SocketRequestMessage _rquestMsg = SocketRequestHandler.GetActualString(_msg); //如果没有接收到定长的数据,循环接收 while (flag != _rquestMsg.MessageLength) { flag += socket.Receive(_bytes, flag, _bytes.Length - flag, SocketFlags.None); _sb.Append(Encoding.Unicode.GetString(_bytes)); } return(_sb.ToString()); }