Java socket 跨路由连接

baiyangliu 2012-06-03 02:14:54
问题是这样的:
我将自己的机器作为ServerSocket端,但是家里装了路由,IP为192.168.0.10。这样一来,不在此路由下的机器如何连接本机呢?我知道有一种方法可以,那就是将本机在路由器上做映射,直接暴露给公网,那么客户端只需连接路由器的IP就可以了。除此之外,有别的方法么?
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiyangliu 2012-06-03
  • 打赏
  • 举报
回复
再次表示感谢!
MiceRice 2012-06-03
  • 打赏
  • 举报
回复
这种是即时通讯工具大多有的能力,所谓智能发现局域网络,然后文件传输直接借助局域网络实现。

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

其实如果你的公司规模较大的话,也会发现有时候通公司两个不同Wifi的QQ,传文件就仍然是走外网QQ公司服务器来中转。
baiyangliu 2012-06-03
  • 打赏
  • 举报
回复


[Quote=引用 3 楼 的回复:]

P2P一般来说必须有1方是可以在公网上被直接访问的。

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


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


无第三种……
[/Quote]

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

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


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


无第三种方式。
baiyangliu 2012-06-03
  • 打赏
  • 举报
回复
类似的,P2P是如何进行连接的呢?
如果我要做一个公网聊天软件,如何让两个客户端(不在同一路由器下)直接通信而不是走服务器转发呢?
MiceRice 2012-06-03
  • 打赏
  • 举报
回复
你说的模式应该是将整机暴露出去,所谓路由上的DMZ设置。

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

立足于你自己环境来做的话,只有这两种模式。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧