import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 基于多线程线程池的UDP局域网通讯协议广播
* 开两条线程 一条发送端,一条客户端
*
* @author silence
*/
public class SendDemo {
public static void main(String[] args) {
//创建线程池
ThreadPoolExecutor thread = new ThreadPoolExecutor(
2,
2,
2,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(2),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy()
);
//发送端
thread.submit(SendDemo::send);
//接收端
thread.submit(SendDemo::receive);
//关闭线程池
thread.shutdown();
}
/**
* 接收端
*/
private static void receive() {
try (DatagramSocket socket = new DatagramSocket(10086)) {
while (true) {
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);
String s = new String(bytes);
if ("886".equals(s)) {
break;
}
System.out.println("接收到的数据:" + s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送端
*/
private static void send() {
try (DatagramSocket socket = new DatagramSocket()) {
InetAddress ip = InetAddress.getByName("255.255.255.255");
Scanner scanner = new Scanner(System.in);
int port = 10086;
while (true) {
System.out.println("发送端请输入:");
String str = scanner.nextLine();
if ("886".equals(str)) {
break;
}
byte[] bytes = str.getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, ip, port);
socket.send(packet);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
07-31
519
06-24
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交