Esempio n. 1
0
        private void AsyncSend(IAsyncResult ar)
        {
            TransClient transClient = (TransClient)ar.AsyncState;

            try
            {
                int bytesRead = transClient.BeginClient.Client.EndReceive(ar);
                if (bytesRead > 0)
                {
                    transClient.RemoteClient.Client.Send(send_buf, bytesRead, SocketFlags.None);
                    // transSocket.RemoteSocket.BeginSend(send_buf, 0, bytesRead, SocketFlags.None, new AsyncCallback(asyncSendData), transSocket.RemoteSocket);
                    this.SendBytes += bytesRead;
                }
                transClient.BeginClient.Client.BeginReceive(send_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncSend), transClient);
            }
            catch (Exception ee)
            {
                Zhangqi.LogHelpMe.WriteLog(ee.Message + ee.StackTrace, LogHelpMe.LogEnum.错误);
            }
        }
Esempio n. 2
0
        private void on_local_connected(IAsyncResult ar)
        {
            TcpClient beginClient;

            try
            {
                beginClient = serverListener.EndAcceptTcpClient(ar);
            }
            catch (Exception ee)
            {
                Zhangqi.LogHelpMe.WriteLog(ee.Message + ee.StackTrace, LogHelpMe.LogEnum.错误);
                return;
            }

            serverListener.BeginAcceptTcpClient(on_local_connected, serverListener);
            FrmMapper.IsClear = false;
            if (tcpClientList.Count > 0)
            {
                if (tcpClientList.Count >= this.MaxNum)
                {
                    string message = (string.Format("客户端'{0}'无法连接,{1} 总连接数目超限", beginClient.Client.RemoteEndPoint.ToString(), this.Name));
                    LogHelpMe.WriteLog(message, LogHelpMe.LogEnum.警告);
                    FrmMapper.IsClear = true;
                    return;
                }
                if (SingleDic.ContainsKey(beginClient.Client.RemoteEndPoint.ToIP()))
                {
                    if (SingleDic != null && SingleDic[beginClient.Client.RemoteEndPoint.ToIP()].Count >= this.SingleNum)
                    {
                        string message = (string.Format("客户端'{0}'无法连接,{1} 单连接数目超限", beginClient.Client.RemoteEndPoint.ToString(), this.Name));
                        LogHelpMe.WriteLog(message, LogHelpMe.LogEnum.警告);
                        FrmMapper.IsClear = true;
                        return;
                    }
                }
            }

            tcpClientList.Add(beginClient);
            if (SingleDic == null)
            {
                return;
            }
            LogHelpMe.WriteLog(string.Format("客户端'{0}'连接进来,{1} 该IP单连接数目为 {2}", beginClient.Client.RemoteEndPoint.ToString(),
                                             Name, SingleDic[beginClient.Client.RemoteEndPoint.ToIP()].Count), LogHelpMe.LogEnum.提示);

            // 连接到转发的Socket
            TcpClient remoteClient = new TcpClient();

            try
            {
                TransClient transClient = new TransClient()
                {
                    RemoteClient = remoteClient, BeginClient = beginClient
                };
                remoteClient.Connect(IPAddress.Parse(this.Point_out_host), this.Point_out_port);
                beginClient.Client.BeginReceive(send_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncSend), transClient);
                remoteClient.Client.BeginReceive(recieve_buf, 0, 4096, SocketFlags.None, new AsyncCallback(AsyncRecieve), transClient);

                FrmMapper.IsClear = true;
            }
            catch
            {
                LogHelpMe.WriteLog(string.Format("{0} 转发端口失败,监听服务器没有开启", Name), LogHelpMe.LogEnum.错误);
                tcpClientList.Remove(beginClient);
            }
        }