服务端
package Net.UDP.Demo3Main1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class ReceiveDemo3 implements Runnable{
boolean flag=false;
DatagramSocket ds = null;
@Override
public void run() {
try {
ds = new DatagramSocket(8888);
} catch (SocketException e) {
e.printStackTrace();
}
new Thread(new Runnable() { //这里开启一个新的线程来处理据包
@Override
public void run() {
while (true) {
//DatagramPacket(byte[] buf, int length)
// 构造 DatagramPacket,用来接收长度为 length 的数据包。
byte bys[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
try {
ds.receive(dp); //阻塞
} catch (IOException e) {
e.printStackTrace();
}
// * 解析数据
// getAddress() 返回发送端的 IP 地址,
// byte[] getData() 获取接受到的数据,也可以直接使用创建包对象时的数组
// int getLength() 返回将要发送或接收到的数据的长度。
InetAddress ia = dp.getAddress();
byte data[] = dp.getData();
int len = dp.getLength();
System.out.println("who:" + ia + "+data:" + new String(data, 0, len) + "+length:" + len);
// System.out.println("who:"+ia+"+data:"+new String(bys,0,len)+"+length:"+len);
// new Thread(new SendDemo3()).notify();
// try {
// wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// ds.close();
}
}
}).start();
// * 接受数据
}
}
客户端
package Net.UDP.Demo3Main1;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class SendDemo3 implements Runnable{
@Override
public void run() {
while (true) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
// * 创建数据并打包
/**
* DatagramPacket:此类表示数据包
* 数据:字节流,byte[]
* 设备的地址ip
* 进程的地址:端口号
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
* */
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
// System.out.println(s);
byte[] bys = s.getBytes();
InetAddress address = null;
try {
address = InetAddress.getByName("DESKTOP-QG1LSJ2");
} catch (UnknownHostException e) {
e.printStackTrace();
}
DatagramPacket dp = new DatagramPacket(bys, bys.length, address, 9999);
// * 发送数据
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}
// * 释放资源
ds.close();
// new Thread(new ReceiveDemo3()).notify();
// try {
// wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
主函数
package Net.UDP.Demo3Main1;
public class Demo3Main {
public static void main(String[] args) {
new Thread(new SendDemo3()).start();
new Thread(new ReceiveDemo3()).start();
}
}