📄 multicastdatagramsenddemo.java
字号:
//【例11-11】 组播发送程序(服务器)。
//程序清单11-11: MulticastDatagramSendDemo.java
package datagram;
import java.util.*;
import java.io.*;
import java.net.*;
public class MulticastDatagramSendDemo {// 主类
public static void main(String[] args) throws java.io.IOException {
new MulticastDatagramSendThread().start();// 创建并启动发送数据报的线程
}
}
// 发送数据报的线程
class MulticastDatagramSendThread extends Thread {
private DatagramSocket datagramSocket = null;// 数据报套接字引用
private BufferedReader brin = null;// 缓存字符输入流引用
private boolean endflag = true;// 读文件结束标志
public MulticastDatagramSendThread() throws IOException {
super("MulticastDatagramSendThread");
datagramSocket = new DatagramSocket();// 创建数据报套接字
try {// 创建来自"Message.txt"文件的缓存字符输入流
brin = new BufferedReader(new FileReader("Message.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void run() {// 发送数据报线程的线程体
System.out.println("组播服务端发送进程已启动...");
while (endflag) {
try {
byte[] bytebuf = new byte[200];
String message = null;
if (brin == null)
message = new Date().toString();// 取系统日期
else
message = getMessage();// 读入文本的内容
bytebuf = message.getBytes();// 字符串转换为字节数组
// 以指定D类地址和端口号创建发送数据报
DatagramPacket packet = new DatagramPacket(bytebuf,
bytebuf.length, InetAddress.getByName("225.8.8.8"),
MulticastDatagramReceiveDemo.PORT);
// 发送数据报
datagramSocket.send(packet);
System.out.println("组播服务端发送进程已发送数据包中的数据:"
+ new String(packet.getData()));
try {// 每隔1秒左右发送一条信息
sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
}
} catch (IOException e) {
e.printStackTrace();
endflag = false;
}
}
datagramSocket.close();// 关闭数据报套接字
}
private String getMessage() {// 读取脚本文件数据
String message = null;
try {// 读入文件内容
if ((message = brin.readLine()) == null) {
brin.close();
endflag = false; // 结束标志置为"false"时则结束发送循环
message = "信息发送完毕!";
}
} catch (IOException e) {
message = "发送的数据报出错!";
}
return message;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -