日期:2014-05-20  浏览次数:20725 次

Java socket 跨路由连接
问题是这样的:
我将自己的机器作为ServerSocket端,但是家里装了路由,IP为192.168.0.10。这样一来,不在此路由下的机器如何连接本机呢?我知道有一种方法可以,那就是将本机在路由器上做映射,直接暴露给公网,那么客户端只需连接路由器的IP就可以了。除此之外,有别的方法么?

------解决方案--------------------
你说的模式应该是将整机暴露出去,所谓路由上的DMZ设置。

另一种方式是在路由上做端口映射,将路由上的某个端口直接映射到机器的某端口上。

立足于你自己环境来做的话,只有这两种模式。
------解决方案--------------------
P2P一般来说必须有1方是可以在公网上被直接访问的。

现在大多数ADSL路由器支持uPnP,而迅雷之类的软件可以通过uPnP协议自动开启路由器的映射端口,那么就相当于自动化实现了“将特定端口直接开放公网”的过程。


另一种情况就是只能走服务器转发,你注意到迅雷提供什么VIP加速;其实就是给你提供了它帮你转发的加速模式,当然还包含了帮你解决跨运营商网段的加速支持。


无第三种方式。
------解决方案--------------------
这种是即时通讯工具大多有的能力,所谓智能发现局域网络,然后文件传输直接借助局域网络实现。

过程其实很简单,QQ服务器会发现两个QQ的公网IP一致,那么说明这两个QQ是共享上网的(甚至可能同机);局域网的本地IP,QQ客户端是可以知道的,然后在大数据量传输前,简单探测下对方IP是否可到达就行了。

其实如果你的公司规模较大的话,也会发现有时候通公司两个不同Wifi的QQ,传文件就仍然是走外网QQ公司服务器来中转。