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

解决方案 »

  1.   

    你说的模式应该是将整机暴露出去,所谓路由上的DMZ设置。另一种方式是在路由上做端口映射,将路由上的某个端口直接映射到机器的某端口上。立足于你自己环境来做的话,只有这两种模式。
      

  2.   

    P2P一般来说必须有1方是可以在公网上被直接访问的。现在大多数ADSL路由器支持uPnP,而迅雷之类的软件可以通过uPnP协议自动开启路由器的映射端口,那么就相当于自动化实现了“将特定端口直接开放公网”的过程。
    另一种情况就是只能走服务器转发,你注意到迅雷提供什么VIP加速;其实就是给你提供了它帮你转发的加速模式,当然还包含了帮你解决跨运营商网段的加速支持。
    无第三种方式。
      

  3.   


    非常感谢你的回答,我还有个疑问。相信你也注意到了,在同一路由(或同属于一个局域网)中用QQ传文件的速度一般是10M/s的,这说明两台机器是直接进行通信的,那么它们是如何取得对方的地址的呢?我理解的是既然有路由器,那么QQ服务器看到的两台主机的IP应该都是路由器的。
      

  4.   

    这种是即时通讯工具大多有的能力,所谓智能发现局域网络,然后文件传输直接借助局域网络实现。过程其实很简单,QQ服务器会发现两个QQ的公网IP一致,那么说明这两个QQ是共享上网的(甚至可能同机);局域网的本地IP,QQ客户端是可以知道的,然后在大数据量传输前,简单探测下对方IP是否可到达就行了。其实如果你的公司规模较大的话,也会发现有时候通公司两个不同Wifi的QQ,传文件就仍然是走外网QQ公司服务器来中转。