精华内容
下载资源
问答
  • 游戏服务器中转代码

    2015-02-09 14:16:44
    游戏服务器中转代码,一个比较简单的转发数据包
  • 服务器中转聊天室.rar

    2020-08-14 14:25:32
    利用Python·实现中转服务器聊天,利用服务器进行中转。可以实现与多个客户端进行通讯。采用多线程技术。
  • 简易版QQ聊天 本程序基于VS2013开发,实现QQ客户端,QQ服务器的简易版聊天功能,是学习TCP客户端,...客户端发送的消息都经过服务器中转,然后发送到对端客户端,基于TCP模式实现,便于了解服务器,客户端的传输机制。
  • 由于项目在做前后端分离,牵扯跨域和夸协议问题,临时抱佛脚,选择用nodejs做中转,我想应该好多人都用它。但是做普通的表单转发没啥问题,当处理附件上传转发时,各种蛋疼,已解决! 1.项目比较特殊,后台拥有两个...
  • 七牛分片上传,纯js代码,无服务器中转
  • 两个不同局域网的客户端A、B,一个公网服务器,A多线程向服务器发送文件,服务器收到文件转发给B,请问服务器端转发该怎么实现,需要同时传送多个文件
  • 二、服务器是Linux 1、配置文件编写 2、放行配置端口 3、开启运行 4、后台运行和开机自启动 三、服务器是Win Server 1、编写配置文件 2、放行服务器端口 3、后台运行和开机自启动 一、准备 一台云服务器...

    目录

    一、准备

    二、服务器是Linux

    1、配置文件编写

    2、放行配置端口

    3、开启运行

    4、后台运行和开机自启动

    三、服务器是Win Server

    1、编写配置文件

    2、放行服务器端口

    3、后台运行和开机自启动


    一、准备

    一台云服务器(linux或win),自己的电脑可以开启远程桌面,frp工具

    (如果网络访问不了GitHub,我下载好了,密码6666)

    frp工具解压后

    二、服务器是Linux

    1、配置文件编写

    ①服务器端

    更改 frps.ini 的配置端口

     更改后将 frpsfrps.ini 上传到服务器

    [root@ecs-341890 hh]# ls
    frps  frps.ini

    再新建一个 run.sh ,里面输入

    ./frps -c ./frps.ini

    赋予  run.sh 执行权限

    chmod +x run.sh

    服务器端配置完成 

    ②客户端配置

    frpcfrpc.ini 放到一个文件夹,frpc.ini 这样配置

     在当前文件夹新建一个 run.bat文件,输入并保存

    frpc -c frpc.ini

    2、放行配置端口

    在云服务器控制台的放行上面的两个端口,建议放行完成之后重启一下服务器

    3、开启运行

    ①服务器端

    执行

    sh run.sh

     正确运行可以看到

     

     ②客户端

    自己电脑双击运行 run.bat 文件,正确运行可以看到

     这时候可以连接远程桌面了,登录地址用"服务器地址:登陆端口",再输入名字和密码

    4、后台运行和开机自启动

    ①服务器端后台运行

    服务器端启动正常之后先按 Ctrl + Z 暂停当前任务,输入 jobs 查看已运行任务,记住小方框内数字

     再使用

    bg 1

    将这个任务在后台运行

    ②客户端自启动并后台运行

    先在客户端配置文件夹下新建 rd.vbs,输入

    Set shell = Wscript.createobject("wscript.shell")
    a = shell.run ("E:\frpc\init.bat",0)

     (绝对路径改成自己的)

    再将 rd.vbs 创建一个快捷方式,把快捷方式放到启动目录下

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

     内存占用也不大

    三、服务器是Win Server

    1、编写配置文件

    ①服务器端

    ②客户端配置

    2、放行服务器端口

    3、后台运行和开机自启动

    参照上面客户端自启动并后台运行

    展开全文
  • 怎么假设中转服务器

    2021-07-30 03:14:50
    弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选...

    弹性云服务器 ECS

    弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率

    三年低至5折,多种配置可选了解详情

    用户数据注入||https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0032380449.html,Windows弹性云服务器登录方式概述||https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0092494943.html,使用VNC Viewer连接Linux云服务器||https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0168615364.html,手工部署Docker(CentOS 7.5)||https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0141067581.html,创建密钥对||https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0014250631.html

    https://www.huaweicloud.com/product/ecs.html

    展开全文
  • 本文阐述如何通过socket实现...2,通过服务器中转的方式,间接实现两个iOS设备之间的通信。 OSI七层协议模型 CocoaAsyncSocket iOS端使用CocoaAsyncSocket框架来调用底层socket。TCP的调用流程下体如下图:...

    本文阐述如何通过socket实现局域网内两个设备之间的通信。有两种方式:
    1,通过socket直接在两个iOS设备之间进行对等通信(Pear to Pear)。
    2,通过服务器中转的方式,间接实现两个iOS设备之间的通信。

    OSI七层协议模型

    这里写图片描述

    CocoaAsyncSocket

    iOS端使用CocoaAsyncSocket框架来调用底层socket。TCP的调用流程下体如下图:
    这里写图片描述

    点对点通信

    点对点通信的Demo可以参考:
    iOS使用CocoaAsyncSocket框架socket通信的demo https://www.jianshu.com/p/68100d518468

    服务器中转消息通信

    这里写图片描述
    Demo可参考:
    https://github.com/gongxiaokai/IMsocketDemo/

    其他问题

    实现了最基本的消息通信距离实现一个完整的类似微信的IM软件还有很大的差距。需要解决的问题有:
    1,如何实现公网IP之间的互相访问?什么是NAT穿透?
    参考:http://hwycheng.bokee.com/2404843.html
    2,需要实现应用层协议,对数据类型,数据发送的起止等等进行协定。
    3,UI层技术,比如语音文字互转,聊天记录本地化等等需要开发。
    参考:http://blog.csdn.net/codermy/article/details/70639948

    总结

    团队接入IM功能有三种选择:
    1,接入成熟的IM框架,成熟的框架有网易云信、云融等,优点是稳定,缺点是收费高。
    2,接入半成熟的IM框架:例如gobelieve等,优点是收费低,缺点是稳定性稍差。
    3,自己研发IM框架,比较靠谱的的选择是参考借鉴coderMyy的思路(iOS基于CocoaAsyncSocket,安卓和后端基于netty),继续开发。

    展开全文
  • 当你遇到访问其他服务器时,由于IP限制或者防火墙的问题而不能直接访问目标服务器,我们可借助即可以访问本地服务器又可以访问目标服务器的第三方服务器,在第三方服务器安装IP端口映射工具,便可以实现间接访问目标...
  • P2P直连?经服务器中转

    千次阅读 2012-12-21 23:01:07
    当同一个系统的两个客户端A、B相互发送消息给对方时,如果它们之间存在P2P通道,那么消息传送的路径就有两种:直接经P2P通道传送、或者经服务器中转。如下图所示:    通常就一般应用而言,如果P2P通道能够成功...
          当同一个系统的两个客户端A、B相互发送消息给对方时,如果它们之间存在P2P通道,那么消息传送的路径就有两种:直接经P2P通道传送、或者经服务器中转。如下图所示: 
    

         

            通常就一般应用而言,如果P2P通道能够成功创建(即所谓的打洞成功),A和B之间的所有消息将直接走P2P通道,这样可以有效节省服务器的带宽和降低服务器的负载。这种模型即是所谓的“P2P通道优先”模型,也是最简单的通道选择模型。

     

    一.通道质量优先模型

     

            然而,有些系统可能不能就如此简单的处理,最简单的例子,如果A和B之间传递的某些类型的消息必需让服务器监控到,那么,这样的消息就必需经过服务器中转。接下来,我们讨论一种较为复杂的情况。比如,在网络语音对话系统中,通道的质量直接决定着用户体验的好坏。我们希望,在这种系统中,语音数据需要始终经由两条通道中的那个质量较高的通道进行传送。这种策略就是所谓的“通道质量优先”模型。

            “通道质量优先”模型理解起来很简单,但是在实际中实现时,却还是很有难度的。通常有两种实现方式:

    (1)定时检测、比较通道延时,并自动切换通道。

    (2)由上层应用决定何时切换通道。一般而言,是当应用发现当前使用的通道不满足要求时,就主动要求切换到另外一条通道。

     

    二.模型实现

     

            下面,我们就基于ESFramework提供的通信功能,来实现这两种方式。我们使用AgileP2PCustomizeOutter类来封装它,并可通过属性控制来启用哪种方式。 

        public class AgileP2PCustomizeOutter:IEngineActor
        {
            //字典。userID - 当前选择的通道(如果为true,表示P2P通道;否则是经服务器中转)?
            private ObjectManager<string, bool> channelStateManager = new ObjectManager<string, bool>(); 
           private ICustomizeOutter customizeOutter; //消息发送器
            private IP2PController p2PController;//P2P控制器
            private IBasicOutter basicOutter; //心跳发送器
            private AgileCycleEngine agileCycleEngine; //定时检测引擎
    
            #region PingTestSpanInSecs
           private int pingTestSpanInSecs = 60;
            /// <summary>
            /// 定时进行ping测试以及自动切换通道的时间间隔,单位:秒。默认值为60。
             /// 如果设置为小于等于0,则表示不进行定时ping测试,也不会自动切换通道。
             /// </summary>
            public int PingTestSpanInSecs
            {
                get { return pingTestSpanInSecs; }
                set { pingTestSpanInSecs = value; }
            }    
            #endregion   
    
            #region Initialize
            public void Initialize(ICustomizeOutter _customizeOutter, IP2PController _p2PController, IBasicOutter _basicOutter)
            {
                this.customizeOutter = _customizeOutter;
                this.p2PController = _p2PController;
                this.basicOutter = _basicOutter;
    
                this.p2PController.P2PChannelOpened += new ESBasic.CbGeneric<P2PChannelState>(p2PController_P2PChannelOpened);
                this.p2PController.P2PChannelClosed += new ESBasic.CbGeneric<P2PChannelState>(p2PController_P2PChannelClosed);
                this.p2PController.AllP2PChannelClosed += new ESBasic.CbGeneric(p2PController_AllP2PChannelClosed);
                Dictionary<string, P2PChannelState> dic = this.p2PController.GetP2PChannelState();
                foreach (P2PChannelState state in dic.Values)
                {
                    bool p2pFaster = this.TestSpeed(state.DestUserID);
                    this.channelStateManager.Add(state.DestUserID, p2pFaster);
                }
    
                if (this.pingTestSpanInSecs > 0)
                {
                    this.agileCycleEngine = new AgileCycleEngine(this);
                    this.agileCycleEngine.DetectSpanInSecs = this.pingTestSpanInSecs;
                    this.agileCycleEngine.Start();
                }
            }
    
            //定时执行,当前客户端到其它客户端之间的通道选择
             public bool EngineAction()
            {
                foreach (string userID in this.channelStateManager.GetKeyList())
                {
                    bool p2pFaster = this.TestSpeed(userID);
                    this.channelStateManager.Add(userID, p2pFaster);
                }
    
                return true;
            }
    
            void p2PController_AllP2PChannelClosed()
            {
                this.channelStateManager.Clear();
            }
    
            void p2PController_P2PChannelClosed(P2PChannelState state)
            {
                this.channelStateManager.Remove(state.DestUserID);
            }
    
            void p2PController_P2PChannelOpened(P2PChannelState state)
            {
                bool p2pFaster = this.TestSpeed(state.DestUserID);
                this.channelStateManager.Add(state.DestUserID, p2pFaster);
            }
            #endregion
    
            #region TestSpeed
            /// <summary>
            /// 定时测试
             /// </summary>     
            private bool TestSpeed(string userID)
            {
                try
                {
                    int transfer = this.basicOutter.PingByServer(userID);
                    int p2p = this.basicOutter.PingByP2PChannel(userID);
                    return p2p <= transfer;
                }
                catch (Exception ee)
                {
                    return false;
                }
            }
            #endregion
    
            /// <summary>
            /// 手动切换通道。
             /// </summary>        
            public void SwitchChannel(string destUserID)
            {
                if (this.channelStateManager.Contains(destUserID))
                {
                    bool p2p = this.channelStateManager.Get(destUserID);
                    this.channelStateManager.Add(destUserID, !p2p);
                }
            }
    
            /// <summary>
            /// 到目标用户是否使用的是P2P通道。
             /// </summary>        
            public bool IsUsingP2PChannel(string destUserID)
            {
                return this.channelStateManager.Get(destUserID);
            }
    
            public bool IsExistP2PChannel(string destUserID)
            {
                return this.channelStateManager.Contains(destUserID);
            }
    
            /// <summary>
            /// 向在线用户发送信息。
             /// </summary>
            /// <param name="targetUserID">接收消息的目标用户ID。</param>
            /// <param name="informationType">自定义信息类型</param>
            /// <param name="post">是否采用Post模式发送消息</param>  
            /// <param name="action">当通道繁忙时所采取的动作</param>  
            public void Send(string targetUserID, int informationType, byte[] info, bool post, ActionTypeOnChannelIsBusy action)
            {
                bool p2pFaster = this.channelStateManager.Get(targetUserID);
                ChannelMode mode = p2pFaster ? ChannelMode.ByP2PChannel : ChannelMode.TransferByServer;
                this.customizeOutter.Send(targetUserID, informationType, info, post, action, mode);
            }
    
            /// <summary>
            /// 向在线用户或服务器发送大的数据块信息。直到数据发送完毕,该方法才会返回。如果担心长时间阻塞调用线程,可考虑异步调用本方法。
             /// </summary>
            /// <param name="targetUserID">接收消息的目标用户ID。如果为null,表示接收者为服务器。</param>
            /// <param name="informationType">自定义信息类型</param>
            /// <param name="blobInfo">大的数据块信息</param>  
            /// <param name="fragmentSize">分片传递时,片段的大小</param>  
            public void SendBlob(string targetUserID, int informationType, byte[] blobInfo, int fragmentSize)
            {
                bool p2pFaster = this.channelStateManager.Get(targetUserID);
                ChannelMode mode = p2pFaster ? ChannelMode.ByP2PChannel : ChannelMode.TransferByServer;
                this.customizeOutter.SendBlob(targetUserID, informationType, blobInfo, fragmentSize, mode);
            }       
        }

            现在,我们对上面的实现简单解释一下。

    (1)由于当前客户端可能会与多个其它的客户端进行通信,而与每一个其它的客户端之间的通信都有通道选择的问题,所以需要一个字典ObjectManager将它们管理起来。

    (2)当某个P2P通道创建成功时,将进行首次ping比较,并将结果记录到字典中。

    (3)定时引擎每隔60秒,分别针对每个其它客户端进行通道检测比较,自动选择ping值小的那个通道。

    (4)当我们将PingTestSpanInSecs设为0时,就可以使用SwitchChannel方法来手动切换通道,即实现了上述的方式2。

    (5)我们最终的目的是实现Send方法和SendBlob方法,之后,就可以使用AgileP2PCustomizeOutter类来替换ICustomizeOutter发送消息。

     

    三.方式选择

     

            上面讲到“通道质量优先”模型的两种实现方式,那么在实际的应用中,如何进行选择了?

    1.ping检测比较,自动切换     

            就这种方式而言,其缺陷在于,在客户端之间需要进行高频通信的系统中,ping检测可能是非常不准确的,甚至是错误的。

            比如,在实时视频对话系统中,其对带宽的要求是比较高的,假设,现在所有的视频数据走的都是P2P通道,那么P2P通道就非常忙碌,而经服务器中转的通道几乎就是空闲的。所以,当下一次定时ping检测到来时,P2P通道的ping值就会比实际的大。从而导致判断失误,而发生错误的自动切换。

    2.手动切换

            对于刚才视频对话的例子,使用手动切换可能是更好的选择,由应用根据上层的实际效果来决定是否需要切换通道。比如,还以视频对话系统为例,应用可以根据信息接收方的定时反馈(在一段时间内,缺少音/视频包的个数,音/视频包的总延时等统计信息)来决定是否要切换到另外一个通道。这种方式更简洁描述可以表达为:如果当前通道质量已达到应用需求,即使另一个通道更快更稳定,也不进行切换;如果当前通道质量达不到应用需求,则切换到另一个通道(有可能另一个通道的质量更糟糕)。 

            本文只是简单地引出通道选择模型的问题,实际上,这个问题是相当复杂的,特别是在一些通信要求很高的项目中,而且,如果将广播消息的通道模型考虑进来就更麻烦了,有兴趣的朋友可以留言进行更深入的讨论。

     

    展开全文
  • tailscale自建derper服务器中转,使用自定义端口
  • 以太坊矿池中转服务器

    千次阅读 2022-01-16 23:40:48
    安装ETH以太坊代理中转程序 支持TCP和SSL协议,支持自定义抽水,高性能高并发,支持web界面管理,包含自启动和进程守护,重启后可以自动运行,放开防火墙和连接数限制,一键搞定。 好处:适合又想要Linux稳定性的,...
  • 数据中转服务工具。

    2018-10-17 00:05:58
    实现跨网络数据通讯,解决公网固定IP的问题,能够很好的解决现场DTU无线设备联调测试的问题!
  • 建立数据中转服务器的详细方法

    千次阅读 2021-03-24 17:27:06
    随着互联网应用的飞速发展,互联网给人们的生活带来了极大的便利。然而互联网暗藏的风险也如悬在头顶的利剑,...本文提出建立个数据中转服务器,在两个物理隔离的网络之间进行数据中转。并通过程序代码予以实现。 ...
  • CentOS7快速搭建DNS中转服务器

    千次阅读 2019-10-31 22:02:31
    安装bind bind-chroot RPM包 yum install bind bind-chroot -y 修改配置文件 vim /etc/named.conf ...... listen-on port53 { 192.168.1.112; }; //监听地址及端口 //修改 ... //listen-on-v6 port53 ...
  • 我的网络课程设计:VC++套接字(服务器中转) 可上线,可下线,可中转客户端消息
  • 中转服务器

    千次阅读 2014-04-20 20:25:29
    中转传输采用3层设计,分别为:用户事件处理层、命令解析层、消息事件驱动层。 在事件驱动层中,将相关消息发送给对应的用户事件处理函数处理。 在命令解析层中发送和接收数据。在接收到数据时,需要验证数据合法...
  • 中控电表数据采集软件,能采集97,07电表协议,但是得配合采集使用,或者有服务器中转
  • Web服务器

    2021-07-31 03:39:16
    什么是Web服务器Web 服务器就是一个软件,这个软件监听某个端口。当一个 HTTP 请求到达这个端口后这个软件会接收到,根据请求的 url 和参数发送响应数据,这些数据可以是:1. 本机文件; 2. 通过可执行程序从数据库...
  • 最近项目要用到webrtc,测试发现内网穿透有时候传输数据不稳定,需要架设一个中转服务器用作数据中转; 由于turn包含了stun的功能,所以这里就只部署了turn服务器,用的是coturn,可以在这里下载,...
  • 无须SMTP服务器中转直接将电子邮件发送到对方邮箱(附源码)【版 本】1.0.0【操作系统】Windows 桌面操作系统【作 者】谢红伟·chrys ·chrys@163.com ·http://www.viction.net【开发日期】2008-11-23 3:54【文档...
  • 使用腾讯云服务器搭建离线(中转)网盘 本文中,使用Aria2实现离线下载,使用Rclone实现上传。应当说,Aria2+Rclone是一个很好的组合。其中,Aria2是一款非常好用的命令行下载工具。当然,为了推广这款下载工具,...
  • import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.servlet.http.HttpServletResponse...URL imgUrl = n
  • 【纯源码】易语言DNS服务器 中转服务器 过滤器。 在问答区求源码,给了一个帖子测试不能用,而且代码超复杂,反而改起来不方便。所以做了这个。 里面数据包处理程序用了原来程序的代码,其余代码自己写的,分享...
  • 完成端口的一个小程序。现实多个客户端和服务器来回的收发。写到后来有实现客户端之间的通讯时有点很困惑。蓝瘦了半天,想找例子都找不到==
  • VC++套接字(服务器中转).rar 服务器转发客户端消息,可上线,可下线,可踢人
  • 大家一定熟悉Foxmail中的“特快专递”,它能直接将邮件发送到对方的邮件服务器中,而不需要经过SMTP服务器中转,本代码将向你剖析“特快专递”发送电子邮件的方法。代码中提供了网卡信息获取类,可以获取本机IP地址...
  • Nginx配置作为中转服务器

    千次阅读 2019-12-24 15:01:39
    1.1、首先使用命令安装必要的组件 yum install wget yum install vim-enhanced yum install make cmake gcc gcc-c++ 1.2、下载nginx安装包 wget ...1.3、安装依赖,其中pcre(perl compatibl...
  • 搭建 git 本地中转

    2021-07-30 03:16:32
    局域网内有多台开发机器,因为种种原因,与服务器同步代码有不便之处。于是打算在本地做一个 git 的镜像,所有机器都统一 clone 这个本地镜像库,然后由这个镜像库负责与服务器更新。1. 使用 –mirror 参数 clonecd ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,326
精华内容 17,730
关键字:

服务器中转

友情链接: snake.rar