2011-09-09 44 views
0

我处于开发跨平台UDP服务器客户端的初期阶段。在我的情况下,客户端通过移动热点选项向他们连接的Android手机发送广播。Android 3G UDP广播

我目前正在通过让服务器和客户端在同一设备上进行测试。但是,我只知道如何获得广播地址,这要感谢boxee远程应用程序。

是否有人知道有一种方法可以像下面的代码一样执行,但要获取移动网络广播地址?

所以,这里是代码:

InetAddress getBroadcastAdd(Context context) throws IOException { 
    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    DhcpInfo dhcp = wifi.getDhcpInfo(); 

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; 
    byte[] quads = new byte[4]; 
    for (int k = 0; k < 4; k++) 
     quads[k] = (byte) ((broadcast >> k * 8) & 0xFF); 
    return InetAddress.getByAddress(quads); 
} 

对于老鹰眼睛的读者,你会聚集,我其实并不需要此代码,该应用在其他设备的工作会得到一个广播地址从wifi上,但我确实需要先对这个设备进行一些测试。

在此先感谢!

回答

0

大多数网络(Wifi和3G)使用NAT。 NAT允许出站连接,但阻止入站(互联网到设备)连接。

当你的服务器和设备都在同一个本地网络(无线),那么这是工作,因为你没有穿越NAT网关。

理由:您试图做的事(从互联网到设备的连接)在大多数网络中都不起作用。

更新

如果你的设备均是同一个本地网络上,那么你可以使用的广告/发现服务标准化的方式:卓悦又名零配置。还有的是,据报道,在Android上运行的Java实现:http://jmdns.sourceforge.net/

另见http://home.heeere.com/tech-androidjmdns.html

+0

我不需要上网,我想在Android设备作为一个服务器,与其他设备连接到它,请求文件等等。 –

+0

正如我所说 - 你不能。 NAT防止启动互联网到设备的连接。 –

+0

只有两台设备位于同一本地(wifi)网络上时,它才会起作用。 –