当前位置:编程学习 > wap >>

关于在wifi环境下,使用UDP和外网服务器通讯的问题。

我的问题如下:
Android手机端作为客户端,服务器端在PC上,有公网的IP。
两者通过UDP通讯。
现在的问题是,如果手机端连接3G,可以与服务器端进行正常的通讯。互相可以接收和发送。
但是,如果手机连接的WIFI(WIFI可以连接外网)的话,服务器可以接受到消息,但是发送回去的话,手机端接收不到。

现在我的疑问有:
1. 手机连3G的时候,不也是在运营商的内网中么?手机先给服务器发消息,在运营商的转发路由器中是不是就已经记录了映射关系?否则服务器应该是找不到手机的。
2. 手机连WIFI的时候,服务器可以接受到,说明网络是联通的。这个时候运营商的转发路由器中应该也是记录了相应的映射关系。但是这个关系是我手机所连接的路由器和服务器间的关系。
我的猜测是,服务器发消息的时候,通过运营商的转发路由器,到我手机连接的路由器,但是这个路由器无法找到我的手机,所以手机端接受不到。
不知道理解的是否正确。
如果是这样的,那我如何给手机连接的路由器增加相应的映射关系。应该是可以通过代码修改吧?

我看了半天,只有NAT的概念,具体的不知道是怎么处理的。

我觉得做网络通讯的,应该对这个问题会比较了解。比如,我们使用QQ的时候,手机连接WIFI,是可以正常使用的。他们是如何做的?
所以,不知各位可否解答一下我心中的疑惑。谢谢。
--------------------编程问答-------------------- UDP如果要穿过NAT,首先Client端先发给带有公网IP的Server端,然后才可以接收UDP包。 如果Server端先发起,恐怕不行。 --------------------编程问答--------------------
引用 1 楼 mountqi 的回复:
UDP如果要穿过NAT,首先Client端先发给带有公网IP的Server端,然后才可以接收UDP包。 如果Server端先发起,恐怕不行。


是的,这个事情我知道。我在连3G的时候就是这么做的,互相可以接收。
但是我不明白的是,为什么在连接WIFI的情况下,服务端只能接收到消息,但是发送的消息手机端并不会收到。
按理说,应该是可以正常接收的。

我是客户端先发送消息,然后服务端再回复的。
不知道您是否知道解决方案。或者这个问题可能是由什么原因造成的。

再或者,您开发类似应用的时候,是不是3G,WIFI都是正常的,并没有做什么区分的特别操作。 --------------------编程问答-------------------- 首先你得确定你的服务器不是通过代理上网的 --------------------编程问答-------------------- tcp好像可以不用穿越nat --------------------编程问答--------------------
引用 3 楼 aaaabbbccd9876 的回复:
首先你得确定你的服务器不是通过代理上网的


你好。您说的这个是什么意思?我不是特别清楚。
通过代理上网有什么区别么?
我在3G的时候没问题,代理对此应该没影响吧?
我不是很清楚,可否详细讲解下。 --------------------编程问答--------------------
引用 4 楼 appleibm 的回复:
tcp好像可以不用穿越nat


你好。请问所谓的nat,是不是路由器自动帮我完成了?需要我人工的去设置么?
如果需要人工设置的话,那比如说,我们使用QQ的时候,手机连接WIFI,用户本身没有做任何处理。他们是可以和服务器通讯的,是吧?
请问这个问题是怎么回事。 --------------------编程问答--------------------
引用 5 楼 u011114750 的回复:
Quote: 引用 3 楼 aaaabbbccd9876 的回复:

首先你得确定你的服务器不是通过代理上网的


你好。您说的这个是什么意思?我不是特别清楚。
通过代理上网有什么区别么?
我在3G的时候没问题,代理对此应该没影响吧?
我不是很清楚,可否详细讲解下。
3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。 --------------------编程问答-------------------- nat server必须的 --------------------编程问答--------------------
引用 8 楼 handyhuang 的回复:
nat server必须的


你好,请问NAT具体是怎么做的? --------------------编程问答--------------------
引用 7 楼 aaaabbbccd9876 的回复:
Quote: 引用 5 楼 u011114750 的回复:

Quote: 引用 3 楼 aaaabbbccd9876 的回复:

首先你得确定你的服务器不是通过代理上网的


你好。您说的这个是什么意思?我不是特别清楚。
通过代理上网有什么区别么?
我在3G的时候没问题,代理对此应该没影响吧?
我不是很清楚,可否详细讲解下。
3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。


你好,请问NAT具体是怎么做的? --------------------编程问答--------------------
引用 10 楼 u011114750 的回复:
Quote: 引用 7 楼 aaaabbbccd9876 的回复:

Quote: 引用 5 楼 u011114750 的回复:

Quote: 引用 3 楼 aaaabbbccd9876 的回复:

首先你得确定你的服务器不是通过代理上网的


你好。您说的这个是什么意思?我不是特别清楚。
通过代理上网有什么区别么?
我在3G的时候没问题,代理对此应该没影响吧?
我不是很清楚,可否详细讲解下。
3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。


你好,请问NAT具体是怎么做的?
这个具体我真的没油试验过,我写的使用的tcp,服务器端转发,udp有点复杂,需要考虑的东西很多,net这个协议网上介绍了很多,可以搜搜看 --------------------编程问答-------------------- 楼主用xmpp吧 --------------------编程问答-------------------- 不知哪位可以讲下到底如何操作可以解决这个问题。十分感谢。

在确定使用UDP的情况下。 --------------------编程问答--------------------
引用 9 楼 u011114750 的回复:
Quote: 引用 8 楼 handyhuang 的回复:

nat server必须的


你好,请问NAT具体是怎么做的?


网络搜索一下这些关键词 UDP打洞  NAT穿透,
先了解清晰这些概念,然后说吧
A<-->{NAT+路由器}<-->B
A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在 --------------------编程问答--------------------
引用 14 楼 handyhuang 的回复:
Quote: 引用 9 楼 u011114750 的回复:

Quote: 引用 8 楼 handyhuang 的回复:

nat server必须的


你好,请问NAT具体是怎么做的?


网络搜索一下这些关键词 UDP打洞  NAT穿透,
先了解清晰这些概念,然后说吧
A<-->{NAT+路由器}<-->B
A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在


谢谢您。不过我不知道是不是有点偏离我的问题了。
我的问题是,我Client端连接3G是可以与Server正常通信的。

现在我只是把连接网络的方式变成了WIFI,这个时候的现象是Server可以接受,但是发不出去。

我的疑问是为什么WIFI的时候Server就找不到Client了。

谢谢。 --------------------编程问答--------------------
引用 15 楼 u011114750 的回复:
Quote: 引用 14 楼 handyhuang 的回复:

Quote: 引用 9 楼 u011114750 的回复:

Quote: 引用 8 楼 handyhuang 的回复:

nat server必须的


你好,请问NAT具体是怎么做的?


网络搜索一下这些关键词 UDP打洞  NAT穿透,
先了解清晰这些概念,然后说吧
A<-->{NAT+路由器}<-->B
A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在


谢谢您。不过我不知道是不是有点偏离我的问题了。
我的问题是,我Client端连接3G是可以与Server正常通信的。

现在我只是把连接网络的方式变成了WIFI,这个时候的现象是Server可以接受,但是发不出去。

我的疑问是为什么WIFI的时候Server就找不到Client了。

谢谢。


以我理解,wifi路由加了nat,
可以尝试wifi路由去掉nat设置 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- TO 16楼:

请问应该怎么理解你说的这句话?
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,