如何使多播程序在不同网络上的计算机之间工作? [英] How do I make my multicast program work between computers on different networks?

查看:106
本文介绍了如何使多播程序在不同网络上的计算机之间工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I made a little chat applet using multicast. It works fine between computers on the same network, but fails if the computers are on different networks. Why is this?

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)都配置为不支持多播.

Most routers (routing IPv4) are configured to not support multicasting.

http://www .ibiblio.org/pub/Linux/docs/howto/other-formats/html_single/Multicast-HOWTO.html

要使多播能够在网络上工作,需要配置所涉及的路由器以支持它. IPv6是必需的,但IPv4是可选的,通常不会完成.

For multicasting to work across networks, the router(s) involved would need to be configured to support it. IPv6 it's required, but IPv4 it is optional and normally not done.

这篇关于如何使多播程序在不同网络上的计算机之间工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆