Example #1
0
 /// <summary>
 ///     从发起端创建与服务器的tcp连接
 /// </summary>
 /// <param name="token"></param>
 public void CreateTcpFromSource(string token)
 {
     Utils.LogUtils.Debug($"命令:0x0201  正尝试建立中转模式隧道token:{token}");
     if (tcpCenter.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient portClient = tcpCenter.WaiteConnetctTcp[token];
         tcpCenter.WaiteConnetctTcp.Remove(token);
         P2PTcpClient serverClient = null;
         EasyOp.Do(() =>
         {
             serverClient = new P2PTcpClient(appCenter.ServerAddress, appCenter.ServerPort);
         }, () =>
         {
             portClient.IsAuth     = serverClient.IsAuth = true;
             portClient.ToClient   = serverClient;
             serverClient.ToClient = portClient;
             Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
             EasyOp.Do(() =>
             {
                 serverClient.BeginSend(sendPacket.PackData());
             }, () =>
             {
                 EasyOp.Do(() =>
                 {
                     Global_Func.ListenTcp <ReceivePacket>(serverClient);
                     Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,隧道建立并连接成功 token:{token}");
                 }, ex =>
                 {
                     Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,隧道建立失败 token:{token}:{Environment.NewLine} {ex}");
                     EasyOp.Do(serverClient.SafeClose);
                     EasyOp.Do(portClient.SafeClose);
                 });
             }, ex =>
             {
                 Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,隧道建立失败 token:{token}:{Environment.NewLine} 隧道被服务器强制断开");
                 EasyOp.Do(portClient.SafeClose);
             });
         }, ex =>
         {
             Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,无法连接服务器 token:{token}:{Environment.NewLine}{ex}");
             EasyOp.Do(portClient.SafeClose);
         });
     }
     else
     {
         LogUtils.Debug($"命令:0x0201 接收到建立中转模式隧道命令,但已超时. token:{token}");
     }
 }
Example #2
0
 public void CreateTcpFromSource_DirectConnect(string token)
 {
     Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
     Utils.LogUtils.Debug($"命令:0x0201  正尝试建立P2P模式隧道 token:{token}");
     if (tcpCenter.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient serverClient = new P2PTcpClient();
         serverClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
         EasyOp.Do(() =>
         {
             serverClient.Connect(appCenter.ServerAddress, appCenter.ServerPort);
         }, () =>
         {
             serverClient.IsAuth = true;
             serverClient.UpdateEndPoint();
             EasyOp.Do(() =>
             {
                 serverClient.BeginSend(sendPacket.PackData());
             },
                       () =>
             {
                 EasyOp.Do(() =>
                 {
                     Global_Func.ListenTcp <ReceivePacket>(serverClient);
                     LogUtils.Debug($"命令:0x0201 P2P模式隧道,已连接到服务器,等待下一步操作 token:{token}");
                 }, ex =>
                 {
                     LogUtils.Debug($"命令:0x0201 P2P模式隧道,服务器连接被强制断开 token:{token}:{Environment.NewLine}{ex}");
                     tcpCenter.WaiteConnetctTcp.Remove(token);
                     EasyOp.Do(serverClient.SafeClose);
                 });
             }, ex =>
             {
                 LogUtils.Debug($"命令:0x0201 P2P模式隧道,隧道打洞失败 token:{token}:{Environment.NewLine} 隧道被服务器强制断开");
                 tcpCenter.WaiteConnetctTcp.Remove(token);
             });
         }, ex =>
         {
             LogUtils.Debug($"命令:0x0201 P2P模式隧道,无法连接服务器 token:{token}:{Environment.NewLine}{ex}");
             tcpCenter.WaiteConnetctTcp.Remove(token);
         });
     }
     else
     {
         LogUtils.Debug($"命令:0x0201 接收到建立P2P模式隧道命令,但已超时. token:{token}");
     }
 }
Example #3
0
        public void CreateTcpFromDest_DirectConnect(string token)
        {
            int port = BinaryUtils.ReadInt(data);

            Utils.LogUtils.Debug($"命令:0x0201  正尝试建立P2P模式隧道 token:{token}");
            P2PTcpClient serverClient = new P2PTcpClient();

            serverClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

            EasyOp.Do(() =>
            {
                serverClient.Connect(appCenter.ServerAddress, appCenter.ServerPort);
            },
                      () =>
            {
                serverClient.IsAuth       = true;
                serverClient.P2PLocalPort = port;
                serverClient.UpdateEndPoint();
                Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);

                EasyOp.Do(() =>
                {
                    serverClient.BeginSend(sendPacket.PackData());
                },
                          () =>
                {
                    EasyOp.Do(() =>
                    {
                        Global_Func.ListenTcp <ReceivePacket>(serverClient);
                        LogUtils.Debug($"命令:0x0201 P2P模式隧道,已连接到服务器,等待下一步操作 token:{token}");
                    }, ex =>
                    {
                        LogUtils.Debug($"命令:0x0201 P2P模式隧道,服务器连接被强制断开 token:{token}:{Environment.NewLine}{ex}");
                        EasyOp.Do(serverClient.Close);
                    });
                }, ex =>
                {
                    LogUtils.Debug($"命令:0x0201 P2P模式隧道,隧道打洞失败 token:{token}:{Environment.NewLine} 隧道被服务器强制断开");
                });
            }, ex =>
            {
                LogUtils.Debug($"命令:0x0201 P2P模式隧道,无法连接服务器 token:{token}:{Environment.NewLine}{ex}");
            });
        }
Example #4
0
 /// <summary>
 ///     从发起端创建与服务器的tcp连接
 /// </summary>
 /// <param name="token"></param>
 public void CreateTcpFromSource(string token)
 {
     Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
     if (Global.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient portClient = Global.WaiteConnetctTcp[token];
         Global.WaiteConnetctTcp.Remove(token);
         P2PTcpClient serverClient = new P2PTcpClient(Global.ServerAddress, Global.ServerPort);
         portClient.IsAuth     = serverClient.IsAuth = true;
         portClient.ToClient   = serverClient;
         serverClient.ToClient = portClient;
         serverClient.Client.Send(sendPacket.PackData());
         Global.TaskFactory.StartNew(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
     }
     else
     {
         LogUtils.Warning($"【P2P】命令:0x0201 接收到P2P命令,但已超时.");
     }
 }
 public void CreateTcpFromSource_DirectConnect(string token)
 {
     Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
     Utils.LogUtils.Info($"命令:0x0201  正尝试内网穿透(P2P模式)token:{token}");
     if (TcpCenter.Instance.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient serverClient = new P2PTcpClient();
         serverClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
         serverClient.Connect(ConfigCenter.Instance.ServerAddress, ConfigCenter.Instance.ServerPort);
         serverClient.IsAuth = true;
         serverClient.UpdateEndPoint();
         serverClient.Client.Send(sendPacket.PackData());
         AppCenter.Instance.StartNewTask(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
     }
     else
     {
         LogUtils.Warning($"命令:0x0201 接收到内网穿透(P2P模式)命令,但已超时. token:{token}");
     }
 }
Example #6
0
 /// <summary>
 ///     从发起端创建与服务器的tcp连接
 /// </summary>
 /// <param name="token"></param>
 protected virtual void CreateTcpFromSource(string token)
 {
     Utils.LogUtils.Debug($"命令:0x0201  正尝试建立中转模式隧道token:{token}");
     if (tcpCenter.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient serverClient = null;
         EasyOp.Do(() =>
         {
             serverClient = new P2PTcpClient(appCenter.ServerAddress, appCenter.ServerPort);
         }, () =>
         {
             Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
             EasyOp.Do(() =>
             {
                 serverClient.BeginSend(sendPacket.PackData());
             }, () =>
             {
                 EasyOp.Do(() =>
                 {
                     tcpCenter.WaiteConnetctTcp[token].Tcp = serverClient;
                     Global_Func.ListenTcp <ReceivePacket>(serverClient);
                     //Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,隧道建立并连接成功 token:{token}");
                 }, ex =>
                 {
                     tcpCenter.WaiteConnetctTcp[token].ErrorMsg = $"命令:0x0201  中转模式隧道,隧道建立失败 token:{token}:{Environment.NewLine} {ex}";
                     tcpCenter.WaiteConnetctTcp[token].PulseBlock();
                 });
             }, ex =>
             {
                 tcpCenter.WaiteConnetctTcp[token].ErrorMsg = $"命令:0x0201  中转模式隧道,隧道建立失败 token:{token}:{Environment.NewLine} 隧道被服务器强制断开";
                 tcpCenter.WaiteConnetctTcp[token].PulseBlock();
             });
         }, ex =>
         {
             tcpCenter.WaiteConnetctTcp[token].ErrorMsg = $"命令:0x0201  中转模式隧道,无法连接服务器 token:{token}:{Environment.NewLine}{ex}";
             tcpCenter.WaiteConnetctTcp[token].PulseBlock();
         });
     }
     else
     {
         LogUtils.Debug($"命令:0x0201 接收到建立中转模式隧道命令,但已超时. token:{token}");
     }
 }
 /// <summary>
 ///     从发起端创建与服务器的tcp连接
 /// </summary>
 /// <param name="token"></param>
 public void CreateTcpFromSource(string token)
 {
     Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
     Utils.LogUtils.Info($"命令:0x0201  正尝试内网穿透(转发模式)token:{token}");
     if (TcpCenter.Instance.WaiteConnetctTcp.ContainsKey(token))
     {
         P2PTcpClient portClient = TcpCenter.Instance.WaiteConnetctTcp[token];
         TcpCenter.Instance.WaiteConnetctTcp.Remove(token);
         P2PTcpClient serverClient = new P2PTcpClient(ConfigCenter.Instance.ServerAddress, ConfigCenter.Instance.ServerPort);
         portClient.IsAuth     = serverClient.IsAuth = true;
         portClient.ToClient   = serverClient;
         serverClient.ToClient = portClient;
         serverClient.Client.Send(sendPacket.PackData());
         AppCenter.Instance.StartNewTask(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
     }
     else
     {
         LogUtils.Warning($"命令:0x0201 接收到内网穿透(转发模式)命令,但已超时. token:{token}");
     }
 }
 public void CreateTcpFromDest_DirectConnect(string token)
 {
     try
     {
         int port = BinaryUtils.ReadInt(data);
         Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
         Utils.LogUtils.Info($"命令:0x0201  正尝试内网穿透(P2P模式) token:{token}");
         P2PTcpClient serverClient = new P2PTcpClient();
         serverClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
         serverClient.Connect(ConfigCenter.Instance.ServerAddress, ConfigCenter.Instance.ServerPort);
         serverClient.IsAuth       = true;
         serverClient.P2PLocalPort = port;
         serverClient.UpdateEndPoint();
         serverClient.Client.Send(sendPacket.PackData());
         AppCenter.Instance.StartNewTask(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
     }
     catch (Exception ex)
     {
         LogUtils.Error($"命令:0x0201 尝试内网穿透(P2P模式) 发生错误:{Environment.NewLine}{ex.Message}");
     }
 }
        /// <summary>
        ///     从目标端创建与服务器的tcp连接
        /// </summary>
        /// <param name="token"></param>
        public void CreateTcpFromDest(string token)
        {
            try
            {
                Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
                Utils.LogUtils.Info($"命令:0x0201  正在绑定内网穿透(3端)通道 token:{token}");
                int         port    = BinaryUtils.ReadInt(data);
                PortMapItem destMap = ConfigCenter.Instance.PortMapList.FirstOrDefault(t => t.LocalPort == port && string.IsNullOrEmpty(t.LocalAddress));

                P2PTcpClient portClient = null;

                if (destMap != null)
                {
                    if (destMap.MapType == PortMapType.ip)
                    {
                        portClient = new P2PTcpClient(destMap.RemoteAddress, destMap.RemotePort);
                    }
                    else
                    {
                        portClient = new P2PTcpClient("127.0.0.1", port);
                    }
                }
                else
                {
                    portClient = new P2PTcpClient("127.0.0.1", port);
                }


                P2PTcpClient serverClient = new P2PTcpClient(ConfigCenter.Instance.ServerAddress, ConfigCenter.Instance.ServerPort);
                portClient.IsAuth     = serverClient.IsAuth = true;
                portClient.ToClient   = serverClient;
                serverClient.ToClient = portClient;
                serverClient.Client.Send(sendPacket.PackData());
                AppCenter.Instance.StartNewTask(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
            }
            catch (Exception ex)
            {
                LogUtils.Error($"命令:0x0201 绑定内网穿透(3端)通道错误:{Environment.NewLine}{ex.Message}");
            }
        }
Example #10
0
        /// <summary>
        ///     从目标端创建与服务器的tcp连接
        /// </summary>
        /// <param name="token"></param>
        public void CreateTcpFromDest(string token)
        {
            try
            {
                Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);
                int         port    = BinaryUtils.ReadInt(m_data);
                PortMapItem destMap = Global.PortMapList.FirstOrDefault(t => t.LocalPort == port && string.IsNullOrEmpty(t.LocalAddress));

                P2PTcpClient portClient = null;

                if (destMap != null)
                {
                    if (destMap.MapType == PortMapType.ip)
                    {
                        portClient = new P2PTcpClient(destMap.RemoteAddress, destMap.RemotePort);
                    }
                    else
                    {
                        portClient = new P2PTcpClient("127.0.0.1", port);
                    }
                }
                else
                {
                    portClient = new P2PTcpClient("127.0.0.1", port);
                }


                P2PTcpClient serverClient = new P2PTcpClient(Global.ServerAddress, Global.ServerPort);
                portClient.IsAuth     = serverClient.IsAuth = true;
                portClient.ToClient   = serverClient;
                serverClient.ToClient = portClient;
                serverClient.Client.Send(sendPacket.PackData());
                Global.TaskFactory.StartNew(() => { Global_Func.ListenTcp <ReceivePacket>(serverClient); });
            }
            catch (Exception ex)
            {
                LogUtils.Error($"【P2P】命令:0x0201 错误:{Environment.NewLine}{ex.ToString()}");
            }
        }
Example #11
0
        /// <summary>
        ///     从目标端创建与服务器的tcp连接
        /// </summary>
        /// <param name="token"></param>
        public void CreateTcpFromDest(string token)
        {
            Utils.LogUtils.Debug($"命令:0x0201  正在连接中转模式隧道通道 token:{token}");
            int         port    = BinaryUtils.ReadInt(data);
            PortMapItem destMap = appCenter.PortMapList.FirstOrDefault(t => t.LocalPort == port && string.IsNullOrEmpty(t.LocalAddress));


            P2PTcpClient portClient = null;

            EasyOp.Do(() =>
            {
                if (destMap != null)
                {
                    if (destMap.MapType == PortMapType.ip)
                    {
                        portClient = new P2PTcpClient(destMap.RemoteAddress, destMap.RemotePort);
                    }
                    else
                    {
                        portClient = new P2PTcpClient("127.0.0.1", port);
                    }
                }
                else
                {
                    portClient = new P2PTcpClient("127.0.0.1", port);
                }
            }, () =>
            {
                P2PTcpClient serverClient = null;
                EasyOp.Do(() =>
                {
                    serverClient = new P2PTcpClient(appCenter.ServerAddress, appCenter.ServerPort);
                }, () =>
                {
                    portClient.IsAuth     = serverClient.IsAuth = true;
                    portClient.ToClient   = serverClient;
                    serverClient.ToClient = portClient;
                    Models.Send.Send_0x0201_Bind sendPacket = new Models.Send.Send_0x0201_Bind(token);

                    EasyOp.Do(() =>
                    {
                        serverClient.BeginSend(sendPacket.PackData());
                    }, () =>
                    {
                        EasyOp.Do(() =>
                        {
                            Global_Func.ListenTcp <ReceivePacket>(serverClient);
                            Utils.LogUtils.Debug($"命令:0x0201  中转模式隧道,连接成功 token:{token}");
                        }, ex =>
                        {
                            LogUtils.Debug($"命令:0x0201 P2P模式隧道,连接失败 token:{token}:{Environment.NewLine}{ex}");
                            EasyOp.Do(portClient.SafeClose);
                            EasyOp.Do(portClient.SafeClose);
                        });
                    }, ex =>
                    {
                        LogUtils.Debug($"命令:0x0201 P2P模式隧道,连接失败 token:{token}:{Environment.NewLine}{ex}");
                        EasyOp.Do(portClient.SafeClose);
                    });
                }, ex =>
                {
                    LogUtils.Debug($"命令:0x0201 P2P模式隧道,连接失败 token:{token}:{Environment.NewLine}{ex}");
                    EasyOp.Do(portClient.SafeClose);
                });
            }, ex =>
            {
                LogUtils.Debug($"命令:0x0201 P2P模式隧道,连接目标端口失败 token{token}:{Environment.NewLine}{ex}");
            });
        }