Java之基于udp协议的datagramSocket通信

本文介绍了UDP协议的实现方式,重点讲解了DatagramSocket和DatagramPacket在Java中的应用。通过创建DatagramSocket对象并指定端口,客户端发送数据包,服务端接收并解析数据。示例展示了简单的UDP服务器和客户端实现,涉及发送、接收数据包的方法及DatagramPacket的构造。

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

DatagramSocket是使用UDP协议的Socket,它的作用是接收和发送数据包.
DatagramSocket对象的常用构造方法

//创建一个数据包套接字,绑定到本机上任意一个可用的端口
DatagramSocket()
//通过指定的套接字地址来创建一个数据包套接字
DatagramSocket(SocketAddress)
//指定本地的一个端口,以此来创建数据包套接字
DatagramSocket(int)
//创建一个DatagramSocket对象,并绑定到指定的地址和端口上
DatagramSocket(int, InetAddress)

DatagramSocket对象的发送、接收方法

public void send(DatagramPacket p) throws IOException  {.....}

public synchronized void receive(DatagramPacket p) throws IOException {....}

DatagramPacket相当于一个被邮寄的包裹,上面写着收货人的地址,包裹里是所要传递的数据。
DatagramPacket对象的常用构造方法

//以一个空数组来创建DatagramPacket对象,该对象的作用是接收DatagramSocket中的数据。相当于一个缓冲池的作用
public DatagramPacket(byte[] buf,int length)
//一个空的数组来创建DatagramPacket对象,其中 int offset 代表偏移量,int length代表长度(也可以说是池子的容量)
 public DatagramPacket(byte buf[], int offset, int length) {} 
//创建一个用于发送的DatagramPacket对象,指定发送buf数组中从offset开始,总共length个字节。
  public DatagramPacket(byte buf[], int offset, int length,  InetAddress address, int port) { }
//以一个包含数据的数组来创建DatagramPacket对象,创建该DatagramPacket对象时还指定了IP地址和端口--这就决定了该数据报的目的地。
DatagramPacket(byte[] buf, int length, InetAddress addr, int port)

通信流程

客户端:
1创建客户端 DatagramSocket 类+指定端口
2准备字节数组
3打包 DatagramPacket +服务器地址 以及端口
4发送
5释放资源
服务端:
1创建服务器 DatagramSocket 类+指定端口
2准备接受的容器 字节数组  封装 DatagramPacket
3接收
4释放资源

实例

public class UdpServer {

    public static void main(String[] args) throws IOException {
        //1、构件服务端 + 端口
        DatagramSocket serverSocket = new DatagramSocket(8888);
        //2、封装成包 DatagramPacket(byte[] buf,int lenth)  相当于构建接受池
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        //接收客户端发来的数据
        serverSocket.receive(datagramPacket);
        //获取接收到的数据
        byte[] data = datagramPacket.getData();
        //获取接收到的数据的长度
        int len = datagramPacket.getLength();
        //输出相关的信息
        System.out.println("收到数据:" + new String(data, 0, len));
        //关闭接收流
        serverSocket.close();
    }
}
public class UdpClient {

    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket();
        String msg = "123456";
        byte[] bs = msg.getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, new InetSocketAddress("127.0.0.1", 8888));
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值