/*关于广播天气预报的java code*/
import java.io.IOException; //导入java.io.IOException类
import java.net.*; //导入java.net包
public class Weather extends Thread{ //创建类。该类为多线程执行程序
String weather = "节目预报:八点有大型晚会,请收听";
int port = 9898; //定义端口
InetAddress iaddress = null; //创建InetAddress对象
MulticastSocket socket = null; //声明多点广播套接字
Weather(){ //构造方法
try {
iaddress = InetAddress.getByName("224.255.10.0"); //实例化InetAddress,指定地址
socket = new MulticastSocket(port); //实例化多点广播套接字
socket.setTimeToLive(1); //指定发送范围是本地网络
socket.joinGroup(iaddress); //加入广播组
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
public void run(){ //run()方法
while(true){
DatagramPacket packet = null; //声明DatagramPacket对象
byte data[] = weather.getBytes(); //声明字节数组
packet = new DatagramPacket(data,data.length,iaddress,port); //将数据打包
System.out.println(new String(data)); //将广播信息输出
try {
socket.send(packet); //发送数据
sleep(3000); //线程休眠
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
}
public static void main(String[] args) { // 主方法
Weather w = new Weather(); //创建本类对象
w.start(); //启动线程
}
}
接收代码为:[code=Java][/code]
import java.awt.event.*; //导入java.awt.event包
import javax.swing.*;
import java.awt.*;
import java.net.*;
public class Receive extends JFrame implements Runnable, ActionListener {
int port; //定义int型变量
InetAddress group = null; //声明InetAddress对象
MulticastSocket socket = null; //创建多点广播套接字对象
JButton ince = new JButton("开始接收"); //创建按钮对象
JButton stop = new JButton("停止接收");
JTextArea inceAr = new JTextArea(10, 10); //显示接收广播的文本域
JTextArea inced = new JTextArea(10, 10);
Thread thread; //创建Thread对象
boolean b = false; //创建boolean型变量
public Receive() { //构造方法
super("广播数据报"); //调用父类方法
thread = new Thread(this);
ince.addActionListener(this); //绑定按钮ince的单击事件
stop.addActionListener(this); //绑定按钮stop的单击事件
inceAr.setForeground(Color.blue); //指定文本域中文字颜色
JPanel north = new JPanel(); //创建Jpane对象
north.add(ince); //将按钮添加到面板north上
north.add(stop);
add(north, BorderLayout.NORTH); //将north放置在窗体的上部
JPanel center = new JPanel(); //创建面板对象center
center.setLayout(new GridLayout(1, 2)); //设置面板布局
center.add(inceAr); //将文本域添加到面板上
center.add(inced);
add(center, BorderLayout.CENTER); //设置面板布局
validate(); //刷新
port = 9898; //设置端口号
try {
group = InetAddress.getByName("224.255.10.0"); //指定接收地址
socket = new MulticastSocket(port); //绑定多点广播套接字
socket.joinGroup(group); //加入广播组
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
setBounds(100, 50, 360, 380); //设置布局
setVisible(true); //将窗体设置为显示状态
}
public void run() { //run()方法
while (true) {
byte data[] = new byte[1024]; //创建byte数组
DatagramPacket packet = null; //创建DatagramPacket对象
packet = new DatagramPacket(data, data.length, group, port); //待接收的数据包
try {
socket.receive(packet); //接收数据包
String message = new String(packet.getData(), 0, packet
.getLength()); //获取数据包中内容
inceAr.setText("正在接收的内容:\n" + message); //将接收内容显示在文本域中
inced.append(message + "\n"); //每条信息为一行
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
if (b == true) { //当变量等于true时,退出循环
break;
}
}
}
public void actionPerformed(ActionEvent e) { //单击事件
if (e.getSource() == ince) { //单击按钮ince触发的事件
ince.setBackground(Color.red); //设置按钮颜色
stop.setBackground(Color.yellow);
if (!(thread.isAlive())) { //如线程不处于“新建状态”
thread = new Thread(this); //实例化Thread对象
}
thread.start(); //启动线程
b = false; //设置变量值
}
if (e.getSource() == stop) { //单击按钮stop触发的事件
ince.setBackground(Color.yellow); //设置按钮颜色
stop.setBackground(Color.red);
b = true; //设置变量值s
}
}
public static void main(String[] args) { //主方法
Receive rec = new Receive(); //创建本类对象
rec.setSize(460, 200); //设置窗体大下
}