1
멀티 캐스트를 사용하여 약간의 채팅 애플릿을 만들었습니다. 그것은 같은 네트워크에있는 컴퓨터간에 잘 작동하지만 컴퓨터가 다른 네트워크에 있으면 실패합니다. 왜 이런거야?다른 네트워크에있는 컴퓨터간에 멀티 캐스트 프로그램을 작동 시키려면 어떻게합니까?
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());
}
}
}
내 로컬 네트워크에서 프로그램이 작동한다는 것은 라우터가 멀티 캐스트로 구성되어 있는지 여부입니다. – George
일부 라우터는 내부 멀티 캐스팅을 지원하도록 구성되지만 WAN으로 더 이상 브로드 캐스팅하지 않을 수도 있습니다. – Martin
@ 조지 (& 마틴) - 대부분의 라우터는 기본적으로 멀티 캐스트를하지 않습니다. 이것이 로컬 네트워크 세그먼트에서만 작동하는 이유입니다. 그리고 당신이 그것을 지원하는 작은 소비자 라우터를 가지고 있다고해도 대부분의 ISP는 멀티 캐스트를 라우팅하지 않습니다. –