Android无法接收广播UDP,但可以接收定向UDP。

4
我遇到了一个问题,我的Android设备(运行原始2.3.4 rom的HTC Incredible)无法接收广播UDP,但当我获取设备的IP地址(在同一网络上)并将数据包直接发送到该IP时,手机立即识别并解释它。我已经在两台不相关的PC上使用WireShark进行了测试,其中一台甚至不在这个网络的同一个交换机上,两台电脑都能看到数据包(尽管它们称呼数据包为“畸形”)。然而,手机从未收到过数据包(它不需要来自数据包的任何数据),所以我想知道发生了什么。
模拟器也出现了同样的问题。
以下是当前代码。
                m_UDPSocket = new DatagramSocket( 9000 );
                m_UDPSocket.setBroadcast( true ); // unneeded?
                boolean finished = false; 

                byte[] buf = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buf, buf.length);

                m_UDPSocket.setSoTimeout( 1000 );
                do {

                    finished = true;
                    try 
                    {
                        m_UDPSocket.receive(packet);    
                    }
                    catch ( SocketTimeoutException  e )
                    {
                        finished = false; 
                        System.out.print( "Socket recieve timed out" );                             
                    }

                } while( finished == false );
                System.out.print( buf );
                InetAddress address = packet.getAddress();

所以我的手机因某种原因拒绝接收UDP广播包,有没有办法测试一下它是否在我的手机上接收到了数据包?这是HTC Incredible问题 HTC issue 吗?我需要对此进行编程处理吗?
非常感谢您能在这个问题上提供任何帮助。

你需要一个多播地址(或广播地址),两者都是特殊地址,而广播地址则取决于子网。http://en.wikipedia.org/wiki/Multicast_address - bestsss
我正在使用广播地址。我测试接收的两台机器都能同时看到它,它是发送到我们子网的192.168.78.255。 - Kinglink
机器是通过以太网电缆连接还是通过WiFi连接? - slayton
@bestsss并不需要多播地址,因为他并没有进行多播操作;同时他也不需要广播地址,因为他是接收者。只有发送者才需要广播地址。 - user207421
@EJP,确切地说,我认为是发送方的问题,或者接收方没有使用组播。 - bestsss
机器通过Wifi连接。 - Kinglink
2个回答

3

尝试使用多播锁定。似乎您的手机正在忽略那些不直接寻址给它的数据包(如广播)。答案有点晚...但也许对于有同样问题的人有所帮助。:)


0
这是HTC Incredible的问题吗?
看起来非常像。
我需要围绕这个编程吗?
除了依赖广播之外,你不能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接