简单的UDP通信

本文介绍了在JAVA中使用DatagramPacket和DatagramSocket进行UDP通信的步骤。发送数据包涉及创建数据包、绑定本地端口和发送数据;接收数据包则包括创建数据包、绑定固定端口以及接收数据包,接收数据包的方法为阻塞式的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA中以两个类来支持UDP通信:

  • java.net.DatagramPacket
  • java.net.DatagramSocket

这两个类代表了UDP通信中的数据包和套接字。所以,使用UDP通信也非常简单,简单归纳成三步,就是创建数据包、创建套接字、用套接字发送/接受数据包。

发送UDP数据包

1.创建数据包
发送数据包的时候,一般需要知道远程主机的地址和端口,所以使用DatagramPacket的四参构造函数较为方便:
public DatagramPacket(byte[] buf, int length, InetAddress address, int port)
前两个参数用来指定发送的字节数组及长度,后两个参数用来指定IP地址及端口号。
一个简单的代码段如下:

byte[] buff = "What time is it?".getBytes();
DatagramPacket dp = new DatagramPacket(buff, buff.length, addr, port);

2.创建套接字绑定到本地端口
由于我们并不关心使用哪个端口发送,所以可以使用DatagramSocket的无参构造函数,这样它会任选一个空闲的端口绑定:

DatagramSocket ds = new DatagramSocket();

3.发送数据包
UDP是无连接的协议,所以直接使用DatagramSocket 的send方法发送数据包:

ds.send(dp);

接收UDP数据包

1.创建数据包
创建数据包只是为了接收数据,并不需要指定IP地址和端口,所以可以使用2参的构造函数:
DatagramPacket(byte[] buf, int length)
参数分别代表接收字符缓冲区及其大小。
一个简单的代码段如下:

byte[] buffres = new byte[1024];
DatagramPacket dprec = new DatagramPacket(buffres, buffres.length);

2.创建套接字绑定到本地端口
由于 发送端需要知道接收端的端口号,所以在创建套接字的时候需要绑定到一个固定的端口上:

DatagramSocket ds = new DatagramSocket(8888);

3.接收数据包
接收UDP数据包的时候使用DatagramSocket的receive方法:

ds.receive(dp);

注意,receive()是一个阻塞的方法,可以使用setSoTimeout()方法设置超时时间,也可以创建一个新的线程。
代码段如下:

ds.setSoTimeout(2000);
ds.receive(dprec);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值