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());}
}
}
...全文
461 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
  • 打赏
  • 举报
回复
怎么没有人帮我看看啊?!
内容概要:本文档为一份《计算机程序设计语言(C++)》课程的实验报告,涵盖了从基础语法到面向对象编程的多个实验内容。实验内容包括基础语法练习(如银行存款计算、数值比较、科学计算)、控制结构(分支与循环,如闰年判断、素数判定、Kaprekar黑洞数)、数组操作(一维与二维数组的排序、查找、极值计算、杨辉三角)、函数定义与应用(递归、参数传递、函数重载)以及面向对象编程(类与对象的设计、继承、多态性、文件操作)。文档详细展示了每个实验的任务描述、具体C++代码实现、测试结果及实验分析,体现了从简单到复杂、逐步深入的学习路径。; 适合人群:具备C++基础语法知识,正在学习或巩固程序设计课程的在校大学生及初级编程学习者。; 使用场景及目标:①作为C++课程的配套实验指导材料,帮助学生通过实践掌握编程基础知识和核心算法;②用于自学练习,提升对循环、数组、函数和面向对象等核心概念的理解与编码能力。; 阅读建议:学习者应结合文档中的代码实例,动手在编程环境中逐一实现并调试,重点关注代码逻辑、边界条件处理和算法效率,通过对比预期输出与实际输出加深对知识点的掌握。

62,622

社区成员

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

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