java局域网广播的问题

xigua99 2008-05-10 04:37:24
为什么我的接收广播数据的程序接收不到广播的数据呢?
我是在本机同时测试,广播和接收端的。

是不是我广播地址有问题!
大家帮我看看.
代码如下:
广播端:
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());}
}
}
...全文
425 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xigua99 2008-05-11
  • 打赏
  • 举报
回复
热心的朋友
xigua99 2008-05-11
  • 打赏
  • 举报
回复
谢谢,非常感谢!
其实我的接收端与广播端是在同一个程序的(他们都是独立的线程)上面没写进去。
但是我还想问,为什么不要用224.0.0.1,有什么不妥吗?
224.0.0.1,这是已规定的全局组。每一个连在局域网上的电脑,都自动加入该组
如果是这样的话,那么接收端还需要加入该组吗?
如果我想向局域网内所有主机广播,该怎么办?
如何查看局域网内的各个分组?
好多问题希望,人心的朋友能帮我解答!
麻烦大家啦!
云上飞翔 2008-05-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xigua99 的回复:]
怎么没有人帮我看看啊?!
[/Quote]
答:兄弟,不用急。他们不帮,我来帮你。
你的程序问题是:
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,这是已规定的全局组。每一个连在局域网上的电脑,都自动加入该组。在程序中不要使用该组。
以上仅供你参考。
xigua99 2008-05-10
  • 打赏
  • 举报
回复
怎么没有人帮我看看啊?!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧