获取 'Can't Assign request address' java.net.SocketException using Ehcache multicast

2022-09-01 01:44:18

尝试启动多播提供程序时获取:java.net.SocketException

2013-09-11 11:45:44,204 [main] ERROR net.sf.ehcache.distribution.MulticastRMICacheManagerPeerProvider: Error starting heartbeat. Error was: Can't assign requested address
java.net.SocketException: Can't assign requested address
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:319)
at net.sf.ehcache.distribution.MulticastKeepaliveHeartbeatReceiver.init(MulticastKeepaliveHeartbeatReceiver.java:88)
at net.sf.ehcache.distribution.MulticastRMICacheManagerPeerProvider.init(MulticastRMICacheManagerPeerProvider.java:95)

答案 1

这是由从 返回的 IPv6 地址引起的。我使用的是Macbook并且使用的是无线 - p2p0(用于AirDrop)被返回为默认网络接口,但我的p2p0只有一个IPv6条目(通过运行找到)。java.net.NetworkInterface.getDefault()etheripconfig

两种解决方案,两者都适合我(我更喜欢第一种,因为无论您使用有线还是无线连接,它都有效)

  1. 使用 启动 JVM。这导致返回我的 vboxnet0 网络接口 - 不确定如果不运行仅主机 VM,你会得到什么。-Djava.net.preferIPv4Stack=truejava.net.NetworkInterface.getDefault()
  2. 关闭无线并使用有线连接

答案 2

对接受的答案略有不同:您还可以将以下代码行添加到Java代码中:

System.setProperty("java.net.preferIPv4Stack", "true");

推荐