首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MulticastSocket可以发送但不能接收

MulticastSocket可以发送但不能接收
EN

Stack Overflow用户
提问于 2013-10-01 21:50:45
回答 2查看 737关注 0票数 1

我正在编写一个通过MulticastSocket进行通信的安卓应用程序。它基本上工作正常,但我遇到了一个奇怪的错误:只要连接中断并恢复(例如,设备短暂地失去WiFi连接),应用程序仍然可以发送,但不能接收任何东西。当其他设备发送数据包时,其他设备会收到数据包,但是当其他设备发送数据包时,该设备不会接收它们。

我已验证receiver Thread仍在运行。它被socket.receive卡住了。添加套接字超时也无济于事,它只是使接收超时而不接收任何东西。

当我关闭并重新打开MulticastSocket时,一切正常。我已经注册了一个用于连接更改的BroadcastReceiver,它会在连接丢失和恢复时重新连接。这在一定程度上缓解了问题,但当连接在另一个点中断(例如重新启动服务器)时,问题仍然会发生。

因此,我要么需要修复socket.receive,要么可靠地找出套接字何时不能接收更多的数据包,以便关闭和重新打开它。有什么建议吗?

代码:

代码语言:javascript
复制
private MulticastSocket socket;

public void open() throws IOException {
    socket = new MulticastSocket(serverAddress.getPort());
    socket.joinGroup(serverAddress.getAddress());

    receiver = new Receiver();
    receiver.start();
}

private void send(MyPacket packet) throws IOException {
    if (socket == null)
        throw new IOException("Connection closed");

    DatagramPacket datagramPacket =
            new DatagramPacket(packet.getBuffer(), packet.getSize(), serverAddress);
    socket.send(datagramPacket);
}

private class Receiver extends Thread {
    @Override
    public void run() {
        while (!closing) {
            if (socket == null)
                return;

            try {
                socket.receive(packet);
            } catch (IOException e) {
                close("IOException in receiver thread", e);
                return;
            }

            onPacketReceived(packet);
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-01-27 11:18:07

看起来Android中的组播支持并不像一些用户希望的那样可靠。请参阅http://codeisland.org/2012/udp-multicast-on-android/

例如,它是否真的有效,或者可能取决于设备。它在我的Nexus5上不工作。

在Android上有许多与多播支持相关的but,但我怀疑你正在与https://code.google.com/p/android/issues/detail?id=1698发生冲突。

票数 0
EN

Stack Overflow用户

发布于 2014-01-27 11:47:14

如果你能检测到wifi何时起伏,我建议你离开并重新加入组,而不是关闭并重新打开插座。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19117991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档