A multicast group is specified by a class D IP address and by a standard UDP port number. Class D IP addresses are in the range 224.0.0.0 to 239.255.255.255, inclusive. The address 224.0.0.0 is reserved and should not be used. 这是JavaTM 2 Platform Std. Ed. v1.4.2 doc里的原文。如果还有问题,大家再一起讨论
如果这样的话,那在LAN中就不能广播消息了,哈!以上的几个方法我都试了还是不行!
以下是我刚写的。在两台机上试过了
import java.net.*;
import java.io.*;
public class Broadcast
{
private InetAddress group;
private int serverPort,clientPort;
private DatagramSocket sender;
private MulticastSocket receiver;
public Broadcast(int serverPort,int clientPort)
{
this.serverPort=serverPort;
this.clientPort=clientPort;
try
{
group=InetAddress.getByName("230.0.0.0");
sender=new DatagramSocket(serverPort);
receiver=new MulticastSocket(clientPort);
receiver.joinGroup(group);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendData(String msg)
{
byte[] b=new byte[1024];
DatagramPacket packet;
try
{
b=msg.trim().getBytes();
packet=new DatagramPacket(b,b.length,group,clientPort);
sender.send(packet);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public String receiveData()
{
byte[] b=new byte[1024];
DatagramPacket packet=new DatagramPacket(b,1024);
String inMsg;
try
{
receiver.receive(packet);
}
catch(IOException e)
{
e.printStackTrace();
}
b=packet.getData();
inMsg=new String(b).trim();
return inMsg;
}
}
import javax.swing.*;
import java.awt.*;
public class Broadcaster extends JFrame implements ActionListener
{
Broadcast broadcast;
Receiver receiver;
JTextArea displayer;
JTextField sender;
JButton btnSend;
public Broadcaster(int a,int b)
{
broadcast=new Broadcast(a,b);
displayer=new JTextArea(10,15);
receiver=new Receiver(broadcast,displayer);
sender=new JTextField(10);
btnSend=new JButton("Send");
btnSend.addActionListener(this);
JPanel north=new JPanel();
north.add(sender);
north.add(btnSend);
JScrollPane scroll=new JScrollPane(displayer);
this.getContentPane().add(north,BorderLayout.NORTH);
this.getContentPane().add(scroll,BorderLayout.CENTER);
this.setSize(300,200);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
receiver.start();
}
public void actionPerformed(ActionEvent e)
{
broadcast.sendData(sender.getText());
sender.setText("");
displayer.requestFocus(true);
sender.requestFocus(true);
}
public static void main(String args[])
{
new Broadcaster(1500,1501);
}
}
{
Broadcast listener;
JTextArea displayer;
String inMsg;
public Receiver(Broadcast listener,JTextArea displayer)
{
this.listener=listener;
this.displayer=displayer;
}
public void run()
{
while(true)
{
inMsg=listener.receiveData();
displayer.append(inMsg);
displayer.append("\n");
}
}
}