黑马程序员技术交流社区

标题: 关于java中建立socket的网络联接 [打印本页]

作者: 王海龙    时间: 2012-12-23 11:46
标题: 关于java中建立socket的网络联接
最近编了一段代码,利用socket建立两台电脑之间的TCP/IP连接
使用内网ip的时候 例如 192.168.1.103 之类建立连接的时候都可以成功
但是使用外网IP连接的时候为何总是失败?
是我获取的ip不是真实的地址,还是有别的什么机制导致不能建立直接连接?
本人对网络原理基本上不太了解
还望不吝赐教!

作者: 熊永标    时间: 2012-12-24 10:21
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后,分别得到对方客户端的信息,如IP后,就可以相互连接通信。之后,就与服务器无关了。
第二种就是如果两个客户端不在个网段内,也就是说外面的计算机访问本机不可达,这两个客户机都是通过网关(路由器等)进行连网,那就需要能网穿透技术,把两台客户机打通之后,就可以连接了。连接之后,与服务器没关系了。qq就是这样的,这过程需要服务器做为第三者进行中介。详细请参考NAPT
像你说的那样,对于数据小还可以,要是像qq这个级别,服务器受不的,而且如果还要视频的话,更加糟糕。服务器会死掉的。
作者: 李海鹏    时间: 2012-12-24 16:15
你在建立连接的时候应该是局域网吧?如果你是在学校里肯定会用到地址转换技术,访问外网时会涉及到私有IP和公有IP。这样就比局域网复杂了。
作者: 李海鹏    时间: 2012-12-24 16:15
熊永标 发表于 2012-12-24 10:21
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后, ...

高见,以后多多交流
作者: 王海龙    时间: 2012-12-24 20:14
多谢各位高见 这下明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2