2010-04-16 2 views
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()); 
} 
} 

} 

답변

2

대부분의 라우터 (라우팅 IPv4)는 멀티 캐스팅을 지원하지 않도록 구성됩니다. 멀티 캐스팅은 네트워크를 통해 작동하려면

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

는 관련 라우터 (들)을 지원하도록 구성해야합니다. IPv6은 필수이지만 IPv4는 선택 사항이며 일반적으로 완료되지 않습니다.

+0

내 로컬 네트워크에서 프로그램이 작동한다는 것은 라우터가 멀티 캐스트로 구성되어 있는지 여부입니다. – George

+1

일부 라우터는 내부 멀티 캐스팅을 지원하도록 구성되지만 WAN으로 더 이상 브로드 캐스팅하지 않을 수도 있습니다. – Martin

+1

@ 조지 (& 마틴) - 대부분의 라우터는 기본적으로 멀티 캐스트를하지 않습니다. 이것이 로컬 네트워크 세그먼트에서만 작동하는 이유입니다. 그리고 당신이 그것을 지원하는 작은 소비자 라우터를 가지고 있다고해도 대부분의 ISP는 멀티 캐스트를 라우팅하지 않습니다. –