关于MulticastSocket中的setTimeToLive方法

setTimeToLive
public void setTimeToLive(int ttl)
                   throws IOException
该方法用于设置在此 MulticastSocket 上发出的多播数据包的默认生存时间,以便控制多播的范围。
ttl 必须在 0 <= ttl <= 255 范围内,否则将抛出 IllegalArgumentException。


本人在两台不同的服务器上做了测试,发现了一个不为人知的问题。

服务器A : JDK1.6_12
服务器B : JDK1.6_18

本人写了一段相同的代码,发送组播数据包,同时使用setTimeToLive方法来设置数据包的TTL值。但是惊奇的发现,程序在服务器A所发出的数据包中的TTL值,并没有改变,始终是默认值1。 而在服务器B上,数据包中的TTL可以通过setTimeToLive方法随便设置。

因此我猜测,是JDK出了问题...在JDK1.6_12及以下版本,此方法失效。 (JDK1.6_6也做了测试)

在JDK1.6_18以上版本有效(对JDK1.6_22也做了测试)。

至于具体在哪一个版本修复了此问题,本人没有进一步调查,望大牛指教。


你可能感兴趣的:(jdk)