为什么我的接收广播数据的程序接收不到广播的数据呢?
我是在本机同时测试,广播和接收端的。是不是我广播地址有问题!
大家帮我看看.
代码如下:
广播端:
import java.net.*;
public class broadcast extends Thread{
public static MulticastSocket broad;
public static String mesg="hello this is test broadcast!";
public static byte[] data;
public static DatagramPacket packet=null;
public static InetAddress grup;
public static int count=0;
public broadcast()
{
try{
broad=new MulticastSocket(64000);

 grup=InetAddress.getByName("224.0.0.1");
broad.joinGroup(grup);
broad.setTimeToLive(1);
data=mesg.getBytes();
    packet=new   DatagramPacket(data,data.length,grup,64000);
}catch(Exception e){System.out.println("server Error:   "+   e);System.exit(1); }
start();
}
public   void   run()  
{   
try  
    {  
while(true)    
      {                           //待广播的数据包。   
                      broad.send(packet); //广播数据包。  
                      System.out.println("broadcast:   "+count++);
                      sleep(50);
                      if(count>50)break;
                
                
      } 
broad.close();
    }  
    catch(Exception   e)  
    {                           
    }  
}
public static void main(String[] args)
{
new broadcast();
}
}
接收广播端:
import java.net.*;
public class geter extends Thread{
public static MulticastSocket broad;
public static byte[] data=new byte[32768];
public static DatagramPacket packet=null;
public static String mesg="";
public static int count=0;
public geter()
{
try{

broad=new MulticastSocket(64000);
packet = new   DatagramPacket(data,data.length,
InetAddress.getByName("224.0.0.1"),64000);
}catch(Exception e){System.out.println(e.toString());System.exit(1);}
start();
}
public void run()
{
try
{
while(true)
{
if(count>40)break;
broad.receive(packet);
mesg=new String(packet.getData(),0,packet.getData().length);
System.out.println(mesg+" :"+count++);


}
broad.close();
}catch(Exception e){ System.out.println(e.toString());}
}
}

解决方案 »

  1.   

    答:兄弟,不用急。他们不帮,我来帮你。
    你的程序问题是:
    1)接收端 怎么没有加入组啊?不加入组是不能收到组上的包的。向组中发包时是可以不用加入组的
    因此:在broad=new MulticastSocket(64000); 之后加上:
    broad.joinGroup(InetAddress.getByName("224.0.0.1"));
    2)怎么没有main()方法啊?否则怎么运行呢?
    加上:
    public static void main(String[] args) {
    new geter();
    }

    你的程序就可正常运行收到包了。
    几点建议:
    1)你的程序在运行结束之前,要用leaveGroup()离开组
    2)不要使用组:224.0.0.1,这是已规定的全局组。每一个连在局域网上的电脑,都自动加入该组。在程序中不要使用该组。
    以上仅供你参考。