下面是我的广播测试例子
运行服务器:java broadcastdemo.BroadcastDemo server 230.0.0.1 9999
运行客户端:java broadcastdemo.BroadcastDemo client 230.0.0.1 9999
但是无论如何,客户端收不到任何消息!
如果打开某个网络抓包工具进行监控,那么可以看到服务器发出的包,并且十分奇怪的是,此时客户端也能正常接收所有消息。何故?package broadcastdemo;
import java.net.*;
import java.util.*;
public class BroadcastDemo
{
  public static void main(String[] args)
  {
    if(args[0].equals("server"))
    {
      (new Server(args[1], Integer.parseInt(args[2]))).start();
    }
    else if(args[0].equals("client"))
    {
      (new Client(args[1], Integer.parseInt(args[2]))).start();
    }
  }
}
class   Client  extends Thread
{
  int   port;                         //组播的端口.
  InetAddress   group=null;          //组播组的地址.
  MulticastSocket   socket=null;    //多点广播套接字.
  public   Client(String groupAddr,int port)
  {
    this.port=port;
    try
    {
      group=InetAddress.getByName(groupAddr);
      socket=new   MulticastSocket(port);
      socket.joinGroup(group);
    }
    catch(Exception   e)
    {
      e.printStackTrace();
    }
  }
  public   void   run()
  {
    DatagramPacket   packet=null;
    while(true)
    {
      byte   data[]=new   byte[256];
      packet=new   DatagramPacket(data,data.length);     //待接收的数据包。
      try
      {
        socket.receive(packet);
        String   message=new   String(packet.getData(),0,packet.getLength());
        System.out.println(message);
      }
      catch(Exception   e)
      {
        e.printStackTrace();
      }
    }
  }
}class Server extends   Thread
{
  InetAddress   group=null;        //组播组的地址.
  MulticastSocket   socket=null;   //多点广播套接字.
  int port;
  Server(String groupAddr,int port)
  {
    try
    {
      group=InetAddress.getByName(groupAddr);    
      this.port=port;
      socket=new   MulticastSocket(port);     
      //socket.setTimeToLive(1);  
      socket.joinGroup(group);                      
      //可以被加入到group中的成员接收到。
    }
    catch(Exception   e)
    {
      e.printStackTrace();
    }
  }
  public   void   run()
  {
    while(true)
    {
      try
      {
        DatagramPacket   packet=null;               //待广播的数据包。
        byte data[]=(new Date()).toString().getBytes();
        packet=new   DatagramPacket(data,data.length,group,port);
        socket.send(packet);    //广播数据包。
        System.out.println(new String(data));
        sleep(5000);
      }
      catch(Exception   e)
      {
        e.printStackTrace();
      }
    }
  }
 }

解决方案 »

  1.   

    答:在发送方代码中,加上:socket.setBroadCast(true);试试。
    也许你机器中,当时情况内核是不允许发组播包的(即这个选项没有打开,客户机当然就收不到包了),而网络抓包工具刚好帮你打开了这个选项。这样也会出现你所说的奇怪的现象。
      

  2.   

    socket.setBroadCast(true);
    之后,仍然不能在我本机上接收到。
    在其他人的机器上都是正常的,并且从别人机器上的服务器发出的UDP广播,我的客户端也是可以太收到的
    太奇怪了
    可能有哪些网络设置或者服务影响这个问题?
      

  3.   

    奇怪,我也是抓包能抓到,UDP收不到……