- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
尝试调用 MulticastSocket 上的 joinGroup(addr) 时出现 SocketException。这只发生在我们设置为在机器启动时自动启动我们的应用程序的 Windows 机器上。
似乎抛出异常是因为 Windows 尚未完全完成其启动过程,这是异常。
java.net.SocketException: error setting options
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.PlainDatagramSocketImpl.join(Unknown Source)
at java.net.MulticastSocket.joinGroup(Unknown Source)
在我们的应用程序启动时,如果我们在尝试加入群组之前等待一分钟,一切正常。
因此我们决定放入一个重试循环,以便它会在网络可用时立即连接,这似乎可以正常工作。两次失败后,第三次尝试加入该组。
问题是,现在 MulticastSocket 没有收到来自该组的任何消息,即使它加入得很好。
我在每次失败后创建一个新的 MulticastSocket 并丢弃旧的。
为什么在一个 MulticastSocket 上加入组失败会影响没有任何错误加入的组,我怎么可能解决这个问题?
最佳答案
我从来没有弄清楚为什么套接字在成功加入群组后收不到消息。不过,我确实想出了一个变通办法。
我遍历所有网络接口(interface)并确保列表中有一个有效接口(interface)并且它已启动并正在运行。接下来我要做的是尝试在 MulticastSocket 上设置该网络接口(interface)。如果这些测试通过,那么我让套接字尝试加入组。看起来可行,但我还是想知道更多幕后情况。
private void validateNetworkInterfaces() throws IOException {
Enumeration nis = NetworkInterface.getNetworkInterfaces();
List<NetworkInterface> nics = new ArrayList<NetworkInterface>();
while (nis.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) nis.nextElement();
logger.debug("nic name: " + ni.getDisplayName());
logger.debug("nic isLoopback(): " + ni.isLoopback());
logger.debug("nic isPointToPoint(): " + ni.isPointToPoint());
logger.debug("nic isVirtual(): " + ni.isVirtual());
logger.debug("nic isUp(): " + ni.isUp());
logger.debug("nic supportsMulticast(): " + ni.supportsMulticast());
if (!ni.isLoopback() && !ni.isPointToPoint() && !ni.isVirtual() && ni.isUp() && ni.supportsMulticast()) {
logger.debug("adding nic: " + ni.getDisplayName());
nics.add(ni);
}
}
//check to make sure at least one network interface was found that supports multicast.
if (nics.size() == 0) throw new SocketException("No network interfaces were found that support multicast.");
//make sure the network interface can be set on a multicast socket
for (NetworkInterface nic : nics) {
logger.debug("attempting to set network interface on nic: " + nic.getDisplayName());
MulticastSocket ms1 = new MulticastSocket(45599);
ms1.setNetworkInterface(nic);
}
}
关于java - MulticastSocket 失败后没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583950/
我的服务器当前能够发送和接收多播数据包。我还添加了接收和发送单播数据包的功能。因此,我创建了“DatagramSocket uniRecv”和“DatagramSocket uniSend”来模仿多播
我正在使用多播编写一个java聊天应用程序。客户端可以在它们之间进行通信,但它们也可以向服务器发送预定义的消息,服务器始终对相应的预定义消息有相同的答案。 客户端和服务器端都可以接收和发送消息。它们都
我正在尝试让多播套接字在“服务器”应用程序上工作,该应用程序将向一堆 Android 手机发送信息。负责设置套接字并发送一些数据的代码片段如下: private MulticastSocket
我正在编写一个通过 MulticastSocket 进行通信的 Android 应用程序。它基本上工作正常,但我遇到了一个奇怪的错误:每当连接中断并恢复时(例如设备短暂失去 WiFi 连接),应用程序
这个问题已经有答案了: 奥 git _a (1 个回答) 已关闭 9 年前。 我编写了一些应该从 MulticastSocket 接收数据的代码。由于某种原因,套接字永远不会接收。我已将其分解为下面的
我正在尝试在我的 PC(Ubuntu,客户端)和手机(Android,服务器)之间创建简单的多播通信。 单播/TCP 连接工作没有任何问题,定义的端口 (37659) 在 PC 和手机上均打开。尝试使
我正在研究多人游戏中服务器-客户端通信的结构。 我得出的结论是,UDP 是最佳选择,因为它采用“一劳永逸”的使用方式,即使数据包丢失也不会阻止应用程序。我还将使用 TCP 发送需要可靠性的数据包,例如
我正在尝试订阅一个特定的市场数据提要,通过 FAST 协议(protocol)以多播方式分发。在Java中,有MulticastSocket,也有DatagramChannel支持多播。 我使用的
尝试调用 MulticastSocket 上的 joinGroup(addr) 时出现 SocketException。这只发生在我们设置为在机器启动时自动启动我们的应用程序的 Windows 机器上
我在 Android 中有一个应用程序使用 MulticastSocket 进行通信。我想在 J2ME 中编写类似的应用程序,使用 MulticastSocket 通过 WiFi 与 Android
我正在尝试在 Java 上执行一个简单的多播套接字示例。 MulticastSocket s = new MulticastSocket(6789); InetAddress group = In
我有 2 个线程想要调用: multicastSocket.send(dP1) 和 multicastSocket.send(dP2) 分别,其中dP1和dP2是不同的DatagramPacket对象
我有两个线程。第一个在循环中发送带有 MulticastSocket 的数据报;第二个线程在循环中使用相同的 MulticastSocket 实例接收数据报。 它似乎工作正常,但我仍然有疑问。 这两个
我开发客户端-服务器应用程序,实时工作。服务器和客户端通过小消息交换,所以我选择 UDP 作为我的体系结构(正如网络中许多文章所建议的那样)。使用默认 java 的 DatagramSocket/Da
我有一些线程在同一个 MulticastSocket 上写入(取决于调度,可能会发生多于一个线程同时在 MulticastSocket 上写入)。我是否必须通过使用某种形式的锁定让他们在每个计时器上写
我正在尝试在创建 MulticastSocket 后加入多播组。 做类似的事情: MulticastSocket mySocket = new MulticastSocket(4444); mySoc
当一个服务器向多个客户端广播时,哪个实现更快/更有效:MulticastSocket 或 DatagramSocket? 也请大家讨论一下,谢谢! 传递的消息涉及字符串和 float 。 最佳答案 决
我正在推理我的应用程序中的多播套接字线程安全性。首先,我有多个线程共享同一个多播套接字实例,该多播套接字用于加入同一端口上的不同组。这是我的问题: 我是否必须同步对 joinGroup() 和 lea
我可能对此处的绑定(bind)一词有根本的误解,但我对 MulticastSocket 的用法感到困惑。它是构造函数。他们不会做我理解他们应该做的事情,因此任何能帮助我消除误解的人都将不胜感激。 首先
我开始使用 MulticastSocket 编写代码,尝试制作一个简单的应用程序,使用客户端和服务器来发送消息。 我为服务器准备的代码: import java.io.IOException;
我是一名优秀的程序员,十分优秀!