【问题标题】:Receive UDP Broadcast fails when change wifi Status Android更改wifi状态Android时接收UDP广播失败
【发布时间】:2013-10-14 03:38:44
【问题描述】:

我在 AsynTask 中有一个接收例程:

                    byte[] message = new byte[1500];
                    s = new DatagramSocket(null);
                    s.setReuseAddress(true);
                    s.bind(new InetSocketAddress(dataclass.getDataclass().GGGPort));
                    p = new DatagramPacket(message, message.length);
                    s.setSoTimeout(500);
                    s.setBroadcast(true);
                    dataclass.getDataclass().setGoOut(true);
                    s.receive(p);

这段代码非常适合在 Android 中接收 UDP 广播数据包,但我们有一个问题: 当在 Android 中接收 UDP 数据包并且我关闭接入点(没有更多数据包到达)并且打开接入点后,我遇到了同样的问题:超时。

在这种情况下,如果我禁用 wifi 并启用 wifi 再次工作...

有人遇到同样的问题吗?

【问题讨论】:

    标签: android sockets udp wifi broadcast


    【解决方案1】:

    每次设备的连接状态发生变化时,您可能需要重新创建和重新绑定接收套接字。

    【讨论】:

    • 嗨雷米,感谢您的回复。我做!但它不起作用。正如您在我的代码中看到的那样,我对捕获的每个接收/超时都执行此操作。
    • 为什么每次新接收时都要创建一个新套接字?您应该创建一次套接字并多次接收它,然后您可以仅在实际需要时重新创建该套接字。想想如果一个 UDP 数据包被发送给你,但你没有一个套接字在那个时候主动监听它会发生什么。它会被丢弃。因此,如果您尝试接收已被丢弃的数据包,这可能会导致您的超时问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多