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

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

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

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

我觉得做网络通讯的,应该对这个问题会比较了解。比如,我们使用QQ的时候,手机连接WIFI,是可以正常使用的。他们是如何做的?
所以,不知各位可否解答一下我心中的疑惑。谢谢。
...全文
998 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
米德文特 2015-01-28
  • 打赏
  • 举报
回复
说那么多,不就是在路由器上做个端口映射么.转发规则那一项填写手机的WIFI IP地址和接收端口....因为你服务器发给手机的数据其实是发给了路由器,路由器不知道应该给哪个手机
客留云 2014-12-25
  • 打赏
  • 举报
回复
楼主啊,手机的网络属于外网还是内网,能用其中一台手机做服务器吗,如果手机不行的话,做服务器的电脑必须是猫直接连接的电脑吗,也就是这个电脑的直接IP必须是外网IP吗, 其实如果你能把代码发给我瞅瞅的话,我会感激不尽的,448704647@qq.com
u011114750 2013-12-18
  • 打赏
  • 举报
回复
TO 16楼: 请问应该怎么理解你说的这句话?
hyx-work 2013-12-13
  • 打赏
  • 举报
回复
引用 15 楼 u011114750 的回复:
[quote=引用 14 楼 handyhuang 的回复:] [quote=引用 9 楼 u011114750 的回复:] [quote=引用 8 楼 handyhuang 的回复:] nat server必须的
你好,请问NAT具体是怎么做的?[/quote] 网络搜索一下这些关键词 UDP打洞 NAT穿透, 先了解清晰这些概念,然后说吧 A<-->{NAT+路由器}<-->B A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在[/quote] 谢谢您。不过我不知道是不是有点偏离我的问题了。 我的问题是,我Client端连接3G是可以与Server正常通信的。 现在我只是把连接网络的方式变成了WIFI,这个时候的现象是Server可以接受,但是发不出去。 我的疑问是为什么WIFI的时候Server就找不到Client了。 谢谢。[/quote] 以我理解,wifi路由加了nat, 可以尝试wifi路由去掉nat设置
u011114750 2013-12-12
  • 打赏
  • 举报
回复
引用 14 楼 handyhuang 的回复:
[quote=引用 9 楼 u011114750 的回复:] [quote=引用 8 楼 handyhuang 的回复:] nat server必须的
你好,请问NAT具体是怎么做的?[/quote] 网络搜索一下这些关键词 UDP打洞 NAT穿透, 先了解清晰这些概念,然后说吧 A<-->{NAT+路由器}<-->B A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在[/quote] 谢谢您。不过我不知道是不是有点偏离我的问题了。 我的问题是,我Client端连接3G是可以与Server正常通信的。 现在我只是把连接网络的方式变成了WIFI,这个时候的现象是Server可以接受,但是发不出去。 我的疑问是为什么WIFI的时候Server就找不到Client了。 谢谢。
hyx-work 2013-12-11
  • 打赏
  • 举报
回复
引用 9 楼 u011114750 的回复:
[quote=引用 8 楼 handyhuang 的回复:] nat server必须的
你好,请问NAT具体是怎么做的?[/quote] 网络搜索一下这些关键词 UDP打洞 NAT穿透, 先了解清晰这些概念,然后说吧 A<-->{NAT+路由器}<-->B A侧可以叫内网,B侧叫外网,UDP数据是不能从B到A的,因为B只知道路由器地址,不知道A的存在
u011114750 2013-12-11
  • 打赏
  • 举报
回复
不知哪位可以讲下到底如何操作可以解决这个问题。十分感谢。 在确定使用UDP的情况下。
passself 2013-12-10
  • 打赏
  • 举报
回复
楼主用xmpp吧
aaaabbbccd9876 2013-12-10
  • 打赏
  • 举报
回复
引用 10 楼 u011114750 的回复:
[quote=引用 7 楼 aaaabbbccd9876 的回复:] [quote=引用 5 楼 u011114750 的回复:] [quote=引用 3 楼 aaaabbbccd9876 的回复:] 首先你得确定你的服务器不是通过代理上网的
你好。您说的这个是什么意思?我不是特别清楚。 通过代理上网有什么区别么? 我在3G的时候没问题,代理对此应该没影响吧? 我不是很清楚,可否详细讲解下。[/quote]3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。[/quote] 你好,请问NAT具体是怎么做的?[/quote]这个具体我真的没油试验过,我写的使用的tcp,服务器端转发,udp有点复杂,需要考虑的东西很多,net这个协议网上介绍了很多,可以搜搜看
u011114750 2013-12-10
  • 打赏
  • 举报
回复
引用 7 楼 aaaabbbccd9876 的回复:
[quote=引用 5 楼 u011114750 的回复:] [quote=引用 3 楼 aaaabbbccd9876 的回复:] 首先你得确定你的服务器不是通过代理上网的
你好。您说的这个是什么意思?我不是特别清楚。 通过代理上网有什么区别么? 我在3G的时候没问题,代理对此应该没影响吧? 我不是很清楚,可否详细讲解下。[/quote]3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。[/quote] 你好,请问NAT具体是怎么做的?
u011114750 2013-12-10
  • 打赏
  • 举报
回复
引用 8 楼 handyhuang 的回复:
nat server必须的
你好,请问NAT具体是怎么做的?
hyx-work 2013-12-08
  • 打赏
  • 举报
回复
nat server必须的
aaaabbbccd9876 2013-12-08
  • 打赏
  • 举报
回复
引用 5 楼 u011114750 的回复:
[quote=引用 3 楼 aaaabbbccd9876 的回复:] 首先你得确定你的服务器不是通过代理上网的
你好。您说的这个是什么意思?我不是特别清楚。 通过代理上网有什么区别么? 我在3G的时候没问题,代理对此应该没影响吧? 我不是很清楚,可否详细讲解下。[/quote]3g分两种模式,ctnet和ctwap,据我测试ctnet不是通过代理上网,拥有外网ip,而ctwap是通过代理上网的,无外网ip。你的服务器若使用的是代理上网,则必须通过路由进行端口映射。
u011114750 2013-12-08
  • 打赏
  • 举报
回复
引用 4 楼 appleibm 的回复:
tcp好像可以不用穿越nat
你好。请问所谓的nat,是不是路由器自动帮我完成了?需要我人工的去设置么? 如果需要人工设置的话,那比如说,我们使用QQ的时候,手机连接WIFI,用户本身没有做任何处理。他们是可以和服务器通讯的,是吧? 请问这个问题是怎么回事。
u011114750 2013-12-08
  • 打赏
  • 举报
回复
引用 3 楼 aaaabbbccd9876 的回复:
首先你得确定你的服务器不是通过代理上网的
你好。您说的这个是什么意思?我不是特别清楚。 通过代理上网有什么区别么? 我在3G的时候没问题,代理对此应该没影响吧? 我不是很清楚,可否详细讲解下。
aaaabbbccd9876 2013-12-07
  • 打赏
  • 举报
回复
首先你得确定你的服务器不是通过代理上网的
appleibm 2013-12-07
  • 打赏
  • 举报
回复
tcp好像可以不用穿越nat
u011114750 2013-12-07
  • 打赏
  • 举报
回复
引用 1 楼 mountqi 的回复:
UDP如果要穿过NAT,首先Client端先发给带有公网IP的Server端,然后才可以接收UDP包。 如果Server端先发起,恐怕不行。
是的,这个事情我知道。我在连3G的时候就是这么做的,互相可以接收。 但是我不明白的是,为什么在连接WIFI的情况下,服务端只能接收到消息,但是发送的消息手机端并不会收到。 按理说,应该是可以正常接收的。 我是客户端先发送消息,然后服务端再回复的。 不知道您是否知道解决方案。或者这个问题可能是由什么原因造成的。 再或者,您开发类似应用的时候,是不是3G,WIFI都是正常的,并没有做什么区分的特别操作。
mountqi 2013-12-06
  • 打赏
  • 举报
回复
UDP如果要穿过NAT,首先Client端先发给带有公网IP的Server端,然后才可以接收UDP包。 如果Server端先发起,恐怕不行。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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