【问题标题】:Android 3G UDP Broadcast安卓 3G UDP 广播
【发布时间】:2011-09-09 23:20:05
【问题描述】:

我正处于开发跨平台 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 获取广播地址,但我确实需要在这台设备上进行一些测试首先。

提前致谢!

【问题讨论】:

    标签: java android networking udp


    【解决方案1】:

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

    当您的服务器和设备都在同一个本地网络 (wifi) 上时,这可以正常工作,因为您没有穿越 NAT 网关。

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

    更新

    如果您的设备都在同一个本地网络上,那么您可以使用标准化的广告/发现服务方式:Bonjour aka Zeroconf。有报道称可以在 android 上运行的 java 实现:http://jmdns.sourceforge.net/

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

    【讨论】:

    • 我不需要互联网访问,我希望 android 设备充当服务器,其他设备连接到它,请求文件等。
    • 正如我所说 - 你不能。 NAT 阻止启动 Internet 到设备的连接。
    • 只有在两个设备都在同一个本地 (wifi) 网络上时才能工作。
    • 啊哈,我想我明白了。因此,如果 android 设备充当路由器并且连接了两个设备。那2个可以交流吗?那正确吗?我对整个网络云雀有点陌生,你知道更好的方法吗?我的目标是让 android 设备将文件推送到连接的客户端,一旦进行了更改?谢谢!
    • 好的,感谢您的帮助。我已经让android充当服务器。第二个 android 设备充当客户端并与其通信,连接到它的 wifi 热点。这似乎运行良好,稍后将在 iOS 上进行测试。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多