`
feng88724
  • 浏览: 172765 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

关于MulticastSocket中的setTimeToLive方法

    博客分类:
  • Java
JDK 
阅读更多
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也做了测试)。

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


分享到:
评论
1 楼 java2liwei 2014-11-03  
你确定是生存时间而不是跨网段  

相关推荐

    MulticastSocket编程

    `MulticastSocket`提供了设置多播选项的方法,如`setInterface(InetAddress interface)`来指定用于发送和接收多播数据的网络接口,以及`setTimeToLive(int ttl)`来设置数据包在网络中的生存时间(TTL)。...

    java使用MulticastSocket实现多点广播

    MulticastSocket 是 Java 中用于实现多点广播的类,它提供了joinGroup() 和 leaveGroup() 方法来加入和离开多点广播地址,并提供了 setTimeToLive() 方法来设置数据报的生命周期。使用 MulticastSocket 可以实现高效...

    基于Java的组播组中发送和接受数据实例.zip

    通过`setTimeToLive()`方法,我们可以控制数据包在网络中的传播范围,防止循环回路导致的数据包无限传播。 7. **网络接口选择**: 通过`setInterface()`方法,我们可以指定使用哪个网络接口进行组播通信,这对于多...

    MultiCast1.rar

    3. 设置多播TTL(Time To Live):TTL决定了数据包在网络中的跳数,可以使用`setTimeToLive(int ttl)`方法设置。 三、发送和接收组播数据 1. 发送数据:使用`send(DatagramPacket dp)`方法发送数据包。首先创建一...

    MulticastChat2.rar

    5. **setTimeToLive()**:设置多播数据包在网络中的生存时间,以避免无限循环。 6. **leaveGroup()**:当不再需要接收多播数据时,使用此方法退出多播组。 通过深入研究"MulticastChat2.java",可以学习到如何设置...

    MulticastSystem

    同时,`setTimeToLive`方法可以设置数据包在网络中存活的时间,避免无限传播。 在实际应用中,组播系统常常与线程结合使用,以便同时处理多个接收和发送任务。此外,为了实现更复杂的组播功能,如动态加入/离开组、...

    java使用MulticastScoket实现多点广播

    不过,MulticastSocket还提供了一个特有的`setTimeToLive(int ttl)`方法,用于设置数据报在网络中的存活时间(TTL),决定数据报能跨越多少个网络节点。TTL值越大,数据报传播的范围越广。默认情况下,TTL值为1,这...

    Android编程实现基于局域网udp广播自动建立socket连接的方法

    注意,`setTimeToLive(4)`限制了广播包在网络中的传播范围,避免影响到其他网络。 服务端代码中,同样创建`MulticastSocket`来监听广播。在`onCreate()`方法中,设置广播地址并创建`InetAddress`对象。当有数据包...

    Multicast:向玩家组发送聊天消息

    例如,可以通过设置MulticastSocket的timeToLive(TTL)属性来限制多播数据包在网络中的传播范围: ```java socket.setTimeToLive(2); // TTL值为2,表示最多经过2个路由器 ``` 总的来说,“Multicast:向玩家组...

    简单讲解Java的Socket网络编程的多播与广播实现

    在Java中,可以使用MulticastSocket类来实现多播。下面是一个简单的多播接收器示例: ```java public class MulticastReceiverTest { public static void main(String[] args) throws Exception { final ...

    JAVA局域网广播系统的设计与实现(课程设计).rar

    socket.setTimeToLive(1); socket.joinGroup(group); } catch(Exception e) { System.out.println("Error: "+ e); } setBounds(100,50,360,380); setVisible(true); addWindowListener(new ...

    Multicast.rar_网络编程_Java_

    在Java中,实现多播功能主要依赖于`java.net.MulticastSocket`类。这个类提供了加入多播组、发送多播数据和离开多播组等方法。让我们详细探讨一下这两个源代码文件可能涉及的知识点: 1. **多播组管理**: - `join...

Global site tag (gtag.js) - Google Analytics