Exemple #1
0
        /// <summary>
        /// 发送数据报文
        /// </summary>
        /// <param name="datagram"></param>
        public virtual void Send(string datagram)
        {
            if (String.IsNullOrEmpty(datagram))
            {
                return;
            }

            //获得报文的编码字节
            byte[] data = _coder.GetEncodingBytes(datagram);

            switch (_connectState)
            {
            case ConnectState.NotConnect:
                throw (new ApplicationException("没有连接服务器,不能发送数据"));

            case ConnectState.Connecting:
                _cliSocket.BeginSend(data, 0, data.Length, SocketFlags.None,
                                     new AsyncCallback(SendDataEnd), _cliSocket);
                break;

            case ConnectState.Connected:
                if (_session.ClientSocket.Connected)
                {
                    _session.ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None,
                                                    new AsyncCallback(SendDataEnd), _session.ClientSocket);
                }
                else
                {
                    _connectState = ConnectState.NotConnect;
                }
                break;
            }
        }
Exemple #2
0
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="recvDataClient">接收数据的客户端会话</param>
        /// <param name="datagram">数据报文</param>
        public virtual void Send(Session recvDataClient, string datagram)
        {
            if (String.IsNullOrEmpty(datagram))
            {
                return;
            }
            //获得数据编码
            byte[] data = _coder.GetEncodingBytes(datagram);

            try
            {
                recvDataClient.ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None,
                                                      new AsyncCallback(SendDataEnd), recvDataClient.ClientSocket);
            }
            catch (SocketException)
            {
                if (recvDataClient != null)
                {
                    recvDataClient.Datagram = null;

                    _sessionTable.Remove(recvDataClient.ID);

                    _clientCount--;

                    //客户端强制关闭链接
                    if (ClientClose != null)
                    {
                        ClientClose(this, new NetEventArgs(recvDataClient));
                    }

                    recvDataClient.Close();
                }
            }
            //{1085D671-3AB9-4a64-BDAD-A36F24D77384}
            catch (ObjectDisposedException ex)//先把异常截获了,暂时对异常先不做处理,我在考虑一下看怎么处理
            {
            }
        }