问题描述:
客户端A、B、C、D通过外网(InterNet)与服务器S相连接。进行远程数据交换。A、B、C、D都是通过ADSL上网,动态IP。也有可能是通过代理服务器上网。
数据交换在A、B、C、D之间进行,为了减少对服务器的压力,打算当A要从B取得数据时,A通过服务器得到B的网络地址,然后A直接连到B进行数据交换。
想了几种方案都有缺陷,哪位高手能出一个好的方案,多谢。
客户端A、B、C、D通过外网(InterNet)与服务器S相连接。进行远程数据交换。A、B、C、D都是通过ADSL上网,动态IP。也有可能是通过代理服务器上网。
数据交换在A、B、C、D之间进行,为了减少对服务器的压力,打算当A要从B取得数据时,A通过服务器得到B的网络地址,然后A直接连到B进行数据交换。
想了几种方案都有缺陷,哪位高手能出一个好的方案,多谢。
服务器S向B发出申请(请求与A建立连接)
B同一连接,打开端口(由软件控制)
S向A发送B的地址,向B发送A的地址(服务器实时更新A B的IP地址,当地址变化时向A B更新)
A接受B地址后向B发起连接,端口为软件设置
B判断连接的IP,如果非A则拒绝,如果是则允许接入
(或者可以设定密码,改密码是隐性由服务器发送双方接受的,不会被查知)
(如果要求的密级更高,可以考虑用证书方式,一次性使用)综上:
需要注意的问题:1需要A B C D 均有相应软件支持
或者从服务器下载的插件
又或者时刻登陆S ,由S的插件实现
我考虑是在S上进行监听,记录ABCD的网络地址,A要从B下载数据时通过S转发,A与B用UDP建立连接,进行通信,但丢包问题不好处理。哪位高手有比较好的方案。
如果TCP监听设置在客户端那么监听的端口号怎么取得呢。客户端通赤路由上网时对外网的端口号并不是本地取得的。比如本地用1999在外网看来则是36119。