A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海龙 中级黑马   /  2012-12-23 11:46  /  1503 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后,分别得到对方客户端的信息,如IP后,就可以相互连接通信。之后,就与服务器无关了。
第二种就是如果两个客户端不在个网段内,也就是说外面的计算机访问本机不可达,这两个客户机都是通过网关(路由器等)进行连网,那就需要能网穿透技术,把两台客户机打通之后,就可以连接了。连接之后,与服务器没关系了。qq就是这样的,这过程需要服务器做为第三者进行中介。详细请参考NAPT
像你说的那样,对于数据小还可以,要是像qq这个级别,服务器受不的,而且如果还要视频的话,更加糟糕。服务器会死掉的。

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

回复 使用道具 举报
你在建立连接的时候应该是局域网吧?如果你是在学校里肯定会用到地址转换技术,访问外网时会涉及到私有IP和公有IP。这样就比局域网复杂了。
回复 使用道具 举报
熊永标 发表于 2012-12-24 10:21
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后, ...

高见,以后多多交流
回复 使用道具 举报
多谢各位高见 这下明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马