Java 如何使多播程序在不同网络上的计算机之间工作?

Java 如何使多播程序在不同网络上的计算机之间工作?,java,networking,multicast,Java,Networking,Multicast,我用多播制作了一个聊天小程序。它可以在同一网络上的计算机之间正常工作,但如果计算机在不同的网络上则会失败。为什么会这样 import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ClientA extends JApplet implements ActionListener, Runnable { JTextFiel

我用多播制作了一个聊天小程序。它可以在同一网络上的计算机之间正常工作,但如果计算机在不同的网络上则会失败。为什么会这样

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ClientA extends JApplet implements ActionListener, Runnable {

 JTextField tf;
JTextArea ta;
 MulticastSocket socket;
 InetAddress group;
 String name="";

public void start()  {
    try {
socket = new MulticastSocket(7777);
group = InetAddress.getByName("233.0.0.1");
socket.joinGroup(group); 
socket.setTimeToLive(255);
Thread th = new Thread(this);
th.start();
name =JOptionPane.showInputDialog(null,"Please enter your name.","What is your name?",JOptionPane.PLAIN_MESSAGE);
tf.grabFocus();
    }catch(Exception e) {e.printStackTrace();}
}

public void init() {

JPanel p = new JPanel(new BorderLayout());
ta = new JTextArea();
ta.setEditable(false);
ta.setLineWrap(true);
JScrollPane sp = new JScrollPane(ta);
p.add(sp,BorderLayout.CENTER);
JPanel p2 = new JPanel();
tf = new JTextField(30);
tf.addActionListener(this);
p2.add(tf);
JButton b = new JButton("Send");
b.addActionListener(this);
p2.add(b);
p.add(p2,BorderLayout.SOUTH);
add(p);

}

public void actionPerformed(ActionEvent ae) {
String message = name+":"+tf.getText();
tf.setText("");
tf.grabFocus();
byte[] buf = message.getBytes();
DatagramPacket packet = new DatagramPacket(buf,buf.length, group,7777);
try {
socket.send(packet);
}
catch(Exception e) {}
}



public void run() {
while(true) {
byte[] buf = new byte[256];
String received = "";
  DatagramPacket packet = new DatagramPacket(buf, buf.length);
try {
            socket.receive(packet);
             received = new String(packet.getData()).trim();
}
catch(Exception e) {}
ta.append(received +"\n");
ta.setCaretPosition(ta.getDocument().getLength());
}
}

}
大多数路由器(路由IPv4)配置为不支持多播


对于跨网络工作的多播,需要配置所涉及的路由器以支持它。IPv6是必需的,但IPv4是可选的,通常不执行。

该程序在本地网络上运行的事实是否意味着我的路由器被配置为多播?我想有些路由器可能被配置为支持内部多播,但不将其进一步广播到WAN。那只是猜测though@George(&Martin)-默认情况下,大多数路由器不会路由多播。这就是为什么它只能在本地网段上工作。即使你有一个小的消费者路由器支持它(大多数不支持),大多数ISP也不路由多播。值得注意的是,与这次对话相关的信息没有改变。您不会找到一个支持路由IP多播的消费者路由器,而且每个涉及的路由器都必须这样做。