外网通信socket问题?

yaozhiyong110 2011-04-25 07:47:40
两台电信网络的机子 不是固定ip的 为什么通信不了? ip183查了ip 互相ping都ping不通

有做过外网socket通信的吗? 这样的情况要怎么才能socket通信呢? 请教下...
...全文
1008 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
pippo1889 2011-08-02
  • 打赏
  • 举报
回复
学习下~~~
yaozhiyong110 2011-05-02
  • 打赏
  • 举报
回复
谢谢大家的回复 我自己再整理下...
djalang0748 2011-05-01
  • 打赏
  • 举报
回复
被NAPT给挡住了,因为我们在局域网中的IP地址,是多个PC对应一个IP,通过端口区分
铖邑 2011-05-01
  • 打赏
  • 举报
回复
如果你的主机是处于内网中,那么你ping外网地址,实际上是在ping外网的路由器或防火墙,而你不能ping通的原因是:路由器或防火墙上面的设置时忽略来自WAN口的Ping。

而你如果想让它的端口能被外网的机器访问到,而不需要服务器来中介,就必须把端口映射出来,这个需要在路由器或防火墙上面做设置。
yaozhiyong110 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 xpdavis 的回复:]
引用 47 楼 yaozhiyong110 的回复:
我的意思是 两台外网的电脑 但都能上网 怎么就不能实现互相通信? 一定要固定ip的服务器中转?

也就是说 不是固定ip的网络下 程序就没有办法“知道”对方的存在? 而且哪怕用服务器中转

服务器保存客户端的ip和端口 将信息发给其他的客户端 其他客户端还是有可能互相通信不了的

朋友就试过这个方法


如果你确信是外网的电……
[/Quote]

恩 可以试试 意思就是ping不通但 也许他侦听端口 我用他查的ip和端口连他能行对吧
yaozhiyong110 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 yfqvip 的回复:]
引用 47 楼 yaozhiyong110 的回复:
引用 44 楼 yfqvip 的回复:
引用 39 楼 xpdavis 的回复:
我的意思是 两台外网的电脑 但都能上网 怎么就不能实现互相通信? 一定要固定ip的服务器中转?

也就是说 不是固定ip的网络下 程序就没有办法“知道”对方的存在? 而且哪怕用服务器中转

服务器保存客户端的ip和端口 将信息发给其他的客户端 其他客……
[/Quote]

我自己的机子ipconfig是10的 去ip138查的是外网的ip 116.24... 然后朋友也在138上查了

ip 我ping他查的ip ping不通
铖邑 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 yaozhiyong110 的回复:]
引用 16 楼 maoxing63570 的回复:
不妨在你本机ipconfig看下你的ip发上来看下,然后再把你的ip138.com查到的发上来看下


本机的是10.85.1.10 这个肯定不是外网ip
[/Quote]

楼主这里又说地址是10开头的,又不是外网的地址,到底你的机器是内网的还是外网的,能不能说清楚点啊?
如果是内网地址,那么你可以在路由器或防火墙上面配置映射规则,让它转发到内网机器,这样就可以保证通信了
铖邑 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 yaozhiyong110 的回复:]
我的意思是 两台外网的电脑 但都能上网 怎么就不能实现互相通信? 一定要固定ip的服务器中转?

也就是说 不是固定ip的网络下 程序就没有办法“知道”对方的存在? 而且哪怕用服务器中转

服务器保存客户端的ip和端口 将信息发给其他的客户端 其他客户端还是有可能互相通信不了的

朋友就试过这个方法
[/Quote]

如果你确信是外网的电脑,那么不需要NAT穿透就可以直接通信的,但是前提就是你需要知道对方的地址。
我前面说的意思就是,你不能仅仅因为ping不通就断定二者不能通信,因为ping有时候是不可靠的。
真正可靠的做法是,你可以分别侦听几个不连续的TCP端口,然后用telnet连接上去,如果都无法连接,说明通信八成是有问题的,否则就说明ping的结果是有问题的。
满衣兄 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 yaozhiyong110 的回复:]
引用 44 楼 yfqvip 的回复:
引用 39 楼 xpdavis 的回复:
我的意思是 两台外网的电脑 但都能上网 怎么就不能实现互相通信? 一定要固定ip的服务器中转?

也就是说 不是固定ip的网络下 程序就没有办法“知道”对方的存在? 而且哪怕用服务器中转

服务器保存客户端的ip和端口 将信息发给其他的客户端 其他客户端还是有可能互相通信不了的
[/Quote]
如果你确定是两台外网的电脑之间的通信,那么这两台电脑不应该是内网的IP才对。应该是公网IP,只不过这个公网的IP是不固定的,但是并不影响两台电脑回话的建立。
如果你的两台电脑是内网的IP,那么说明你的外部还是存在NAT的。
这个和IP固定不固定是没有关系的,只跟内网IP和外网IP有关系。

yaozhiyong110 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 xpdavis 的回复:]
或者也可以这么考虑:如果楼主ping的是公网IP(不需要固定的),虽然主机可能是在内网,可以检查一下路由器,有的路由器被设置为禁止WAN PING的,这样就会ping不通。但是如果没有禁止WAN PING的话,有可能是运营商把ping给截掉了。运营商截掉数据包很常见的,我们很多传输层的端口都被禁掉了
[/Quote]

谢谢 我明白你的意思 但我还是希望有方案能实现 哪怕只是设想 实现不了都行...
yaozhiyong110 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 yfqvip 的回复:]
引用 39 楼 xpdavis 的回复:
看了这个帖子的回复,我感到很晕,我觉得回帖热情是好事,可是不要误导楼主啊。
楼主出的问题原因可能比较复杂,需要仔细检查。不过楼主有个误解,就是一定要ping通才能通信,有时候ping是会被拦截的,所以并不一定可靠。

请问哪里误导楼主了?楼主问是外网两台电脑的通信问题,提问里说的很明白,这完全不是拦截不拦截的问题,两个不同局域网并且都没有公网IP的……
[/Quote]

我的意思是 两台外网的电脑 但都能上网 怎么就不能实现互相通信? 一定要固定ip的服务器中转?

也就是说 不是固定ip的网络下 程序就没有办法“知道”对方的存在? 而且哪怕用服务器中转

服务器保存客户端的ip和端口 将信息发给其他的客户端 其他客户端还是有可能互相通信不了的

朋友就试过这个方法

我只希望我的问题能解决 回帖的朋友也没必要互相争论 给出想法和自己的逻辑就给我帮助了

多谢.....


铖邑 2011-04-30
  • 打赏
  • 举报
回复
或者也可以这么考虑:如果楼主ping的是公网IP(不需要固定的),虽然主机可能是在内网,可以检查一下路由器,有的路由器被设置为禁止WAN PING的,这样就会ping不通。但是如果没有禁止WAN PING的话,有可能是运营商把ping给截掉了。运营商截掉数据包很常见的,我们很多传输层的端口都被禁掉了
铖邑 2011-04-30
  • 打赏
  • 举报
回复
楼上这位仁兄好像很好斗啊,我是说有人误导,又没说是你,怎么着急起来了?你看看那些回帖,有说一定要固定IP的,也有说花生壳之类的,这都跟主题对不上号嘛。这不是误导是什么?不知道你有没有仔细看帖呢?是谁不谦虚来着?再说,有时候就算都是公网IP就是ping不通,也很正常的。运营商就给你掐掉了,你有什么办法呢?我只是说ping不一定可靠,也没说错吧。不同情况不同分析嘛,要找原因,还是需要一个一个把问题排除掉,最后才能把真正的原因暴露出来
满衣兄 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 xpdavis 的回复:]
看了这个帖子的回复,我感到很晕,我觉得回帖热情是好事,可是不要误导楼主啊。
楼主出的问题原因可能比较复杂,需要仔细检查。不过楼主有个误解,就是一定要ping通才能通信,有时候ping是会被拦截的,所以并不一定可靠。
[/Quote]
请问哪里误导楼主了?楼主问是外网两台电脑的通信问题,提问里说的很明白,这完全不是拦截不拦截的问题,两个不同局域网并且都没有公网IP的电脑怎么可能ping的通?不懂的问题就虚心请教好吧,别装也别晕
满衣兄 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 yaozhiyong110 的回复:]
引用 39 楼 xpdavis 的回复:
看了这个帖子的回复,我感到很晕,我觉得回帖热情是好事,可是不要误导楼主啊。
楼主出的问题原因可能比较复杂,需要仔细检查。不过楼主有个误解,就是一定要ping通才能通信,有时候ping是会被拦截的,所以并不一定可靠。



只能连续回三次 其他额度朋友就先不回了 其实说起来复杂 但其实我的需求很简单

只不过是在网络通的情况下(不管是不是固定……
[/Quote]
上面那么多人说的都白说了,不知道你看没看,或者理解没理解。
你的要求是很简单,但是做起来很复杂,我可以明确的告诉你没有你说的那种不需要服务器就能建立连接的技术,不存在,并且国内网络相对于欧美国家来说发展很晚的,从而导致公网IP数量很少,并且据统计国内大部分NAT是对称型的。
就算P2P这样的技术也不是完全的点对点,它的连接的建立是必须有一个公网IP的服务器作为引导节点才能建立后续的连接,如果是对称型NAT也是用服务器转发的,牛逼一点的像SKYPE这样的软件只不过引进了超级节点的概念,也就是说把具有公网IP的客户端作为超级节点来转发数据或者保存附近网络内的用户列表。
你好像连最基本的原理还没弄清楚,我还是建议你仔细看看楼上各位的回复,如果我误解了你的意思或者你还有什么不明白的可以找我单挑。
yaozhiyong110 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 xpdavis 的回复:]
看了这个帖子的回复,我感到很晕,我觉得回帖热情是好事,可是不要误导楼主啊。
楼主出的问题原因可能比较复杂,需要仔细检查。不过楼主有个误解,就是一定要ping通才能通信,有时候ping是会被拦截的,所以并不一定可靠。
[/Quote]


只能连续回三次 其他额度朋友就先不回了 其实说起来复杂 但其实我的需求很简单

只不过是在网络通的情况下(不管是不是固定ip,不管是什么网络类型) 保证我的程序

能互相访问(QQ能互相访问,应该是先向服务器提交了信息的 那么对它来说 客户端之间互相通信

肯定是会简单些,只要ip不变,或者即使变 有通信就有保持连接的可能) 现在不用服务器呢?

这种情况下 网络的简单和复杂就直接影响到程序是否能通信成功了吧 那么有没有很稳定很成熟的

技术能实现呢? 就算实现不了 那么只是简单的网络 保证能通信应该是可实现的吧
yaozhiyong110 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 jdzfjfhnui 的回复:]
你确定你的外网连接是 ADSL 是直接连接外网 没有路由器? PING都PING不同那就有点不现实?

否则,如果是路由器拖的机器就需要做端口映射
[/Quote]

问题是这个动作肯定是要程序来做吧 没见过别人的网络程序 还要自己手动去做吧 所以喽

如果一定需要做端口映射 那么程序怎么去实现呢?...
yaozhiyong110 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 smwhotjay 的回复:]
tcp/ip的网络编程的书都没看,问的问题很傻很天真
[/Quote]

不解释 貌似你高手 那么请给出外网通信的方案? 不管局域网或者任意的万维网 只有网络通

你的程序就能互相打个招呼都可以... 可别叫我手动查ip啊 改路由啊 什么的
铖邑 2011-04-29
  • 打赏
  • 举报
回复
看了这个帖子的回复,我感到很晕,我觉得回帖热情是好事,可是不要误导楼主啊。
楼主出的问题原因可能比较复杂,需要仔细检查。不过楼主有个误解,就是一定要ping通才能通信,有时候ping是会被拦截的,所以并不一定可靠。
满衣兄 2011-04-29
  • 打赏
  • 举报
回复
1、如果两台机器都有公网IP(即使是不固定的也可以,至少在某一时间段是固定的),这样是可以互通的,不需要第三方建立连接
2、如果两者有一台是有公网IP,那么也是可以互通的,必须是内网中的机器先发起连接请求
3、如果两台机器都没有公网IP,那么需要第三台在公网中具有公网IP的机器做中转站来建立连接才能通信,可以用这台机器做转发也可以利用它做为NAT穿透的服务器
否则两台机器不能建立连接,更谈不上通信传输数据了。
加载更多回复(37)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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