1、使用 DatagramSocket 收发数据
由 api 文档可知此类表示用来发送和接收数据报包的套接字。
数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。
即 DatagramSocket 本身只是码头,不维护状态,不能产生 IO 流,它的唯一作用就是接收和发送数据报
*ps:Socket(套接字)网络通信就是 Socket 通信 数据在两个 Socket 中通过 IO 传输
2、发送样例
DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口。 建立时无需写端口号接收时需要
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length
的包发送到指定主机上的指定端口号。
思路:
1、建立 socket 服务
2、数据封装成包
3、通过 socket 发送数据包
4、关闭服务
public class UDPSendDemo {
public static void main(String args[]) throws IOException{
System.out.println("Send!!!");
//创建UDP服务
DatagramSocket ds = new DatagramSocket();
//发送数据
String str = "UDP Demo";
//发送 数据封装到数据包
byte [] buf = str.getBytes();
InetAddress ip = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(buf, buf.length,ip,8888);
ds.send(dp);
ds.close();
}
}
3、接收样例
DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramPacket(byte[] buf, int length)
构造 DatagramPacket
,用来接收长度为 length
的数据包。
思路:
1、建立 socket 服务,明确端口
2、接收数据
3、解析数据 ip,data,端口
4、关闭
public class UDPReceiveDemo {
public static void main(String [] args) throws IOException{
System.out.println("Receive!!!");
//创建Socket服务
DatagramSocket ds = new DatagramSocket(8888);
//使用Socket接收数据
byte [] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);//阻塞式方法,等待接收到数据。
//解析
//getAddress获取ip getHostAddress 获取字符串表示
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
//获取有效数据
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+port+"-----"+str);
ds.close();
}
}
测试结果
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于