网上找的例子,我在本地计算机开启多个是可以通信,但是在局域网中的另一台机器就是不能接受或发送到我本机上,即不同机器二者不能相互通信,不知道各位是否砬到过,希望大家帮我看下,如能解决,可以现金酬谢,不胜感激!!
import java.net.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import javax.swing.*;
public class MutilCast {
    public static void main(String[] args)
    {
        MulticastSocket s              = null;
        InetAddress group               = null;    
        JPanel northPanel               =new JPanel();   
        JPanel southPanel               =new JPanel();
        JPanel namePanel                =new JPanel(new FlowLayout());
        JLabel sendLabel                =new JLabel("发送内容:");
        JLabel nameChangeLabel          =new JLabel("给自己起个名字:");
final    JTextField nameSpace           =new JTextField(20);
final    JTextArea messageArea          =new JTextArea("",20,20);
final    JTextField sendField            =new JTextField(30);
        JScrollPane message              =new JScrollPane(messageArea);
        JButton sendButton               =new JButton("发送");
        JButton saveButton               =new JButton("保存记录");
        JButton clearUpButton            =new JButton("清空面板");
        Box    centerBox                  =Box.createVerticalBox();
        namePanel.add(nameChangeLabel);
        namePanel.add(nameSpace);
        centerBox.add(namePanel);
        centerBox.add(message);   
      //实现组播数据传送的配置信息
        try {
             group = InetAddress.getByName("228.9.6.8");
        } catch (UnknownHostException e1) {
            System.out.println("组播地址绑定失败");
        }      
        try {
            s = new MulticastSocket(6789);
            s.setTimeToLive(1);
        } catch (IOException e1) {
            System.out.println("组播地址创建失败");
        }
        try {
                s.joinGroup(group);
        } catch (IOException e1) {
            System.out.println("组播地址加入失败");
        }
      //end实现组播数据传送的配置信息
      //“发送”按钮实现信息功能的发送部分                  
        class SendMsg implements ActionListener
        {
            String msg=null;         
            MulticastSocket s=null;
            InetAddress group = null;
            public SendMsg(MulticastSocket s,InetAddress group)
            {
                this.s=s;
                this.group=group;
            }
            public void actionPerformed(ActionEvent e)
            {              
                 try
                {
                     //如果名字为空 给出提示信息
                    if(nameSpace.getText().isEmpty())                   
                        new JOptionPane().showMessageDialog(null, "请一定要取别名!");
                    else
                    {
                    //如果名字不为空 则把名字添加到数据报头
                    msg=(nameSpace.getText()+"说:"+sendField.getText());
DatagramPacket data=
 new DatagramPacket(msg.getBytes(),msg.getBytes().length,group, 6789);
                    s.send(data);
                    }
                 }
                 catch (IOException e1) {
                    System.out.println("发送失败");
                }      
            }
        }
         //实现数据报的接受线程      
        class  recevMsg extends Thread
        {
             MulticastSocket s=null;
             public recevMsg(MulticastSocket s)
             {
                 this.s=s;
             };
             public void run()
             {
                 byte[] buf = new byte[100];
                DatagramPacket recv = new DatagramPacket(buf, buf.length);
                 try
                 {
                     while(true)
                     {
                         s.receive(recv);
                         String str=new String(recv.getData());
                          String line =System.getProperty("line.separator");
                         messageArea.append(str);
                         messageArea.append(line);
                     }
                 }
                 catch (IOException e1)
                 {
                     System.out.println("接受失败");
                 }
             }
        }
       //聊天记录的保存 保存在当前位置下的"Note.txt"文件中
        class SaveMsg implements ActionListener
        {
            String msg=null;
            String line =System.getProperty("line.separator");
            public void actionPerformed(ActionEvent e)
            {              
                 try
                 {
                    msg=messageArea.getText();
                     FileOutputStream Note=new FileOutputStream("Note.txt");
                    messageArea.append("记录已经保存在Note.txt");
                    Note.write(msg.getBytes());
                    messageArea.append(line);
                    Note.close();
                 }
                 catch (IOException e1) {
                    System.out.println("发送失败");
                }      
            }
        }
        //清除面板上的聊天记录
        class ClearMsg implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {              
                 try
                 {
                     messageArea.setText("");
                 }
                 catch (Exception e1) {
                    System.out.println("清空失败");
                }      
            }
        }
        JFrame mutilCastFrame=new JFrame("组播聊天工具");
        northPanel.add(sendLabel);
        northPanel.add(sendField);
        northPanel.add(sendButton);
        southPanel.add(saveButton);
        southPanel.add(clearUpButton);
        mutilCastFrame.getContentPane().add(northPanel,"North");
        mutilCastFrame.getContentPane().add(southPanel,"South");  
        mutilCastFrame.getContentPane().add(centerBox,"Center");
mutilCastFrame.setDefaultCloseOperation(mutilCastFrame.EXIT_ON_CLOSE); 
sendButton.addActionListener(new SendMsg(s,group));
        saveButton.addActionListener(new SaveMsg());
        clearUpButton.addActionListener(new ClearMsg());
        mutilCastFrame.setSize(500, 500);
        mutilCastFrame.setLocation(200, 200);
        mutilCastFrame.show();
        recevMsg r=new recevMsg(s);
        r.start();
        }
}JavaMulticastSocket组播

解决方案 »

  1.   

    group = InetAddress.getByName("228.9.6.8");
    228网段属于D类网段,D类网段多用于多路广播,先确保你这几台电脑在一个局域网内,且属于同一个网段,再检查各个终端的防火墙之类的是否关闭了。
      

  2.   

    感谢楼上回答
    to 1 楼: 是无线网络环境,防火墙已经关了的。哦,应该是不是通过路由器设置?
    to 2 楼:那是不是可以其他的地址试试
      

  3.   

    谢谢楼上回答,您的意思是所有终端IP都必须和组播的IP地址是同一网段么
      

  4.   

    不在一个网段,肯定要经过vpn的,除非ip是公网ip
      

  5.   

    非常感谢楼上回答
    由于只是在局域网内用,对于网络拦截,路由器配置也不太会,所以我换了一种方式,用单纯的socket通信基本上能实现互相通信。
    因为我有一个服务端,所有的客户端首先都会连接上服务端,在每个客户端连接上来后,服务端都会把前面已连接的客户端地址发送到该客户端,并且连接所有的客户端,另外再开一个ServerSocket以监听后面的客户端连接。
      

  6.   

    谢谢MiceRice,谢谢fangmingshijie,结贴了