为什么我的接收广播数据的程序接收不到广播的数据呢?
我是在本机同时测试,广播和接收端的。是不是我广播地址有问题!
大家帮我看看.
代码如下:
广播端:
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());}
}
}
我是在本机同时测试,广播和接收端的。是不是我广播地址有问题!
大家帮我看看.
代码如下:
广播端:
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)接收端 怎么没有加入组啊?不加入组是不能收到组上的包的。向组中发包时是可以不用加入组的。
因此:在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,这是已规定的全局组。每一个连在局域网上的电脑,都自动加入该组。在程序中不要使用该组。
以上仅供你参考。