示例#1
0
        private void ReciveCallback(IAsyncResult ar)
        {
            AsyncClientToken token = (AsyncClientToken)ar.AsyncState;

            try
            {
                EndPoint ipe         = new IPEndPoint(IPAddress.Parse(token.IP), token.Port);
                int      recivecount = token.Socket.EndReceiveFrom(ar, ref ipe);
                if (recivecount > 0)
                {
                    string sendData = token.HandlerReturnData(Encoding.UTF8.GetString(token.Buffer, 0, recivecount), false);
                    if (!string.IsNullOrEmpty(sendData))
                    {
                        token.Datasize = Encoding.UTF8.GetBytes(sendData, 0, sendData.Length, token.Buffer, 0);
                        token.Socket.BeginSendTo(token.Buffer, 0, token.Datasize, SocketFlags.None, ipe, new AsyncCallback(SendCallback), token);
                    }
                    else
                    {
                        CloseOneInstance(token);
                    }
                    return;
                }
                token.HandlerReturnData(token.MessageID, true);
                CloseOneInstance(token);
            }
            catch (Exception ex)
            {
                token.HandlerReturnData(token.MessageID, true);
                CloseOneInstance(token);
                if (LogTool != null)
                {
                    LogTool.Log(ex.Message + ex.StackTrace);
                }
            }
        }
示例#2
0
        public void SendMsg(string ipaddress, int port, string sendData, string messageID)
        {
            m_maxNumberAcceptedClients.WaitOne();
            AsyncClientToken asyncClientToken = m_readWritePool.PopOrNew();

            asyncClientToken.IP        = ipaddress;
            asyncClientToken.Port      = port;
            asyncClientToken.MessageID = messageID;
            int sendcount = Encoding.UTF8.GetBytes(sendData, 0, sendData.Length, asyncClientToken.Buffer, 0);

            asyncClientToken.Datasize = sendcount;

            try
            {
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(asyncClientToken.IP), asyncClientToken.Port);
                asyncClientToken.Socket.BeginSendTo(asyncClientToken.Buffer, 0, asyncClientToken.Datasize, SocketFlags.None, ipe, new AsyncCallback(SendCallback), asyncClientToken);
            }
            catch (Exception ex)
            {
                CloseOneInstance(asyncClientToken);
                if (LogTool != null)
                {
                    LogTool.Log(ex.Message + ex.StackTrace);
                }
            }
        }
示例#3
0
        private void SendCallback(IAsyncResult ar)
        {
            AsyncClientToken token = (AsyncClientToken)ar.AsyncState;

            try
            {
                token.Socket.EndSendTo(ar);

                if (token.HandlerReturnData != null)
                {
                    EndPoint ipe = new IPEndPoint(IPAddress.Parse(token.IP), token.Port);
                    token.Socket.BeginReceiveFrom(token.Buffer, 0, m_maxSize, SocketFlags.None, ref ipe, new AsyncCallback(ReciveCallback), token);
                }
                else
                {
                    CloseOneInstance(token);
                }
            }
            catch (Exception ex)
            {
                token.HandlerReturnData(token.MessageID, true);
                CloseOneInstance(token);
                if (LogTool != null)
                {
                    LogTool.Log(ex.Message + ex.StackTrace);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ipaddress"></param>
        /// <param name="port"></param>
        /// <param name="sendData"></param>
        /// <param name="messageID">if occur error, use this messageID as returndata</param>
        /// <param name="handlerReturnData"></param>
        public void SendMsg(string ipaddress, int port, string sendData, string messageID, HandlerReturnData handlerReturnData)
        {
            IPEndPoint ipe          = new IPEndPoint(IPAddress.Parse(ipaddress), port);
            Socket     clientSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            m_maxNumberAcceptedClients.WaitOne();
            AsyncClientToken asyncClientToken = m_readWritePool.PopOrNew();

            asyncClientToken.HandlerReturnData = handlerReturnData;
            asyncClientToken.Socket            = clientSocket;
            asyncClientToken.MessageID         = messageID;
            int sendcount = Encoding.UTF8.GetBytes(sendData, 0, sendData.Length, asyncClientToken.Buffer, 0);

            asyncClientToken.Datasize = sendcount;


            try
            {
                clientSocket.BeginConnect(ipe, new AsyncCallback(ConnectCallback), asyncClientToken);
            }
            catch (Exception ex)
            {
                CloseOneInstance(asyncClientToken);
                if (LogTool != null)
                {
                    LogTool.Log(ex.Message + ex.StackTrace);
                }
            }
        }
示例#5
0
 private void CloseOneInstance(AsyncClientToken token, bool IsError = true)
 {
     if (token != null)
     {
         if (token.Socket != null)
         {
             token.Socket.Close();
             token.Socket = null;
         }
         m_readWritePool.Push(token);
     }
     m_maxNumberAcceptedClients.Release();
 }
        public AsyncSocketClient(int _maxSize, int _maxConnnections, ICommonLog _logTool)
        {
            m_readWritePool   = new SocketAsyncEventArgsPool <AsyncClientToken>();
            m_maxConnnections = _maxConnnections;
            m_maxSize         = _maxSize;
            LogTool           = _logTool;
            m_bufferManager   = BufferManager.CreateBufferManager(m_maxConnnections * m_maxSize, m_maxSize);

            for (int i = 0; i < _maxConnnections; i++)
            {
                AsyncClientToken asyncClientToken = new AsyncClientToken();
                asyncClientToken.Buffer = m_bufferManager.TakeBuffer(m_maxSize);
                m_readWritePool.Push(asyncClientToken);
            }

            m_maxNumberAcceptedClients = new Semaphore(m_maxConnnections, m_maxConnnections);
        }
        private void ConnectCallback(IAsyncResult ar)
        {
            AsyncClientToken token = (AsyncClientToken)ar.AsyncState;

            try
            {
                token.Socket.EndConnect(ar);

                token.Socket.BeginSend(token.Buffer, 0, token.Datasize, SocketFlags.None, new AsyncCallback(SendCallback), token);
            }
            catch (Exception ex)
            {
                token.HandlerReturnData(token.MessageID, true);
                CloseOneInstance(token);
                if (LogTool != null)
                {
                    LogTool.Log(ex.Message + ex.StackTrace);
                }
            }
        }