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也做了测试)。
至于具体在哪一个版本修复了此问题,本人没有进一步调查,望大牛指教。 :roll:
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也做了测试)。
至于具体在哪一个版本修复了此问题,本人没有进一步调查,望大牛指教。 :roll: