2

环境:

手机:摩托罗拉 Xoom,型号 MZ601,Android 3.0.1
路由器:Netgear WNR3500U/WNR3500L

问题:

Android上有一个简单的Java多播监听器:

    public void listenMulticast(){
    try{
        WifiManager wifi = (WifiManager)App.getContext().getSystemService( Context.WIFI_SERVICE );

        /*****Get multicast lock*****/
        MulticastLock multicastLock = wifi.createMulticastLock("MyApp");
        multicastLock.setReferenceCounted(true);
        multicastLock.acquire();

        /*****Create a socket*****/
        MulticastSocket socket = new MulticastSocket(PORT);
        socket.joinGroup(InetAddress.getByName(HOST));

        /*****Receive a message*****/
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        socket.setSoTimeout(TIME_OUT);
        socket.receive(packet);
        ...
    } catch()

}

应用程序在本地范围内接收多播(尝试使用组 224.0.0.250 和端口 6791)但没有看到(socket.receive() 方法中的超时异常)公共范围内的多播:228.5.6.7(和相同的端口 6791例如)。

安全权限是标准的:

<uses-sdk android:minSdkVersion="4"  android:targetSdkVersion="8"></uses-sdk>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"></uses-permission>

我尝试在同一网络中使用不同的安卓手机,它们在组 228.5.6.7 上接收到多播。但是这个摩托罗拉 Xoom 只接收本地多播。

感谢您提出一些可能是错误的想法。

4

0 回答 0