开启线程实现每秒打印当前系统时间

需求

请编写程序,分别模拟使用UDP协议发送和接收数据的两个设备,发送端数据将当前系统时间转换为字符串,发送给接收端,每秒发送一次。接收端接收到数据,将数据以及数据的来源打印到控制台。要求发送数据和接收数据分别开启线程实现。 服务器端显示的运行效果如下:
127.0.0.1发送数据:2022-05-27 16:13:12
127.0.0.1发送数据:2022-05-27 16:13:13
127.0.0.1发送数据:2022-05-27 16:13:14
127.0.0.1发送数据:2022-05-27 16:13:15
127.0.0.1发送数据:2022-05-27 16:13:16

package com.itheima;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo_UDP_Thread {

	public static void main(String[] args) {
		// 先启动接收线程
		new Receive().start();
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// 再启动发送线程
		new Send().start();
	}
}


// 发送线程
class Send extends Thread {
	@Override
	public void run() {
		DatagramSocket socket = null;
		try {
			// 创建发送端 DatagramSocket
			socket = new DatagramSocket();
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			while (true) {
				// 获取当前系统时间
				Date date = new Date();
				String time = format.format(date);
				// 打包数据
				DatagramPacket dp = new DatagramPacket(time.getBytes(),
						time.getBytes().length,
						InetAddress.getByName("127.0.0.1"), 12306);

				// 发送
				socket.send(dp);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}
}



// 接收线程
class Receive extends Thread {
	@Override
	public void run() {
		DatagramSocket socket = null;
		try {
			// 创建接收端 DatagramSocket,绑定端口号
			socket = new DatagramSocket(12306);
			while (true) {
				// 创建接收容器DatagramPacket
				byte[] bys = new byte[1024];
				DatagramPacket dp = new DatagramPacket(bys, bys.length);
				// 接收数据
				socket.receive(dp);
				String ip = dp.getAddress().getHostAddress();
				// 解析包裹得到数据
				byte[] data = dp.getData(); // 获取数据包中的数据
				String str = new String(data, 0, dp.getLength()); // 获取有效的数据长度
				System.out.println(ip + "发送数据:" + str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

你可能感兴趣的:(Java深入学习)