最近在写安卓UDP通信程序时遇到这个问题,就是在安卓模拟器上可以实现收发,但是放到真机上就只能发收不到PC机发来的数据。在网上查了一些资料,发现有很多朋友也遇到这个问题,都没有非常明确的解决方法,我经过尝试终于在真机上收到了PC机发的数据,跟大家分享一下。我用的是eclipse开发环境,安卓虚拟机为2.2版本。为方便讲解,先贴几张图:

图一 安卓模拟器界面

图二 PC机服务程序界面
图一为安卓虚拟机上的界面,在真机上除了文字位置有一些错位外其它都一致(偷个懒就不贴真机效果的照片了),远程IP地址是你的PC端服务程序所在PC的公网IP;远程端口是PC服务程序接收端口;本地端口是手机发送数据时用的端口。图二为测试时用的一个PC端服务程序。PC机上的服务程序必须要能解析出包中的IP和端口号,建议用我提供的PC端服务器,不保证使用其它PC端服务器能实现收发。上图二中的服务程序是在模拟机测试时用的,在真机测试时用不了(好像是我的电脑在内网,它只能读出内网地址的原因)。

在安卓真机上进行UDP通信时遇到只能发送无法接收PC机数据的问题。解决方案包括保持一个socket用于收发,避免在连接期间重复新建或关闭相同端口的socket,确保PC端服务程序能解析IP和端口。同时,PC端服务器必须能够正确解析数据包。遵循这些关键点,可以在真机上实现UDP通信。

2601

被折叠的 条评论
为什么被折叠?



