Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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());
        }