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里的原文。如果还有问题,大家再一起讨论

解决方案 »

  1.   

    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中就不能广播消息了,哈!以上的几个方法我都试了还是不行!
      

  2.   

    实在不想慢慢看别人代码~~不好意思。
    以下是我刚写的。在两台机上试过了
    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;
    }
    }
      

  3.   

    import java.awt.event.*;
    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);
        }
    }
      

  4.   

    import javax.swing.*;public class Receiver extends Thread
    {
    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");

    }
    }
    }
      

  5.   

    如果要单机运行,在main方法里加一行:new Broadcaster(1504,1501);就可以了^^