Java --- UDP 通信 DatagramSocket DatagramPacket 使用 完整步骤

    UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。
    区别于TCP传输的可靠性,UDP编程在创建时,不指定数据接收方的ip 和端口,而是把这些连接信息放在了数据报中,其他数据处理,和TCP类似。诸位可以参考小编之前的两篇关于 TCP 通信传输的文章:Java — ServerSocket 和 Socket 简单通信 完整步骤Java — ServerSocket 和 Socket 多线程通信 完整步骤
 下面,小编演示一下UDP通信的完整步骤,Let go!

public class UdpTest {

    //发送端
    @Test
    public void sender() throws IOException {
        //1,创建upd数据报socket,报文接收端的Ip和端口,在数据包中定义,socket不关心
        //这点区别于TCP传输方式
        DatagramSocket socket = new DatagramSocket();
        //2,创建数据包,数据内容,Ip 端口
        //这里使用 127.0.0.1
        InetAddress inetAddress = InetAddress.getLocalHost();
        String str = "你好,我是发送端";
        //转换为字节发送
        byte[] bytes = str.getBytes();
        DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length,inetAddress,8081);
        //3,启动upd发送
        socket.send(packet);
        //4,关闭socket资源
        socket.close();
    }

    //接收端
    @Test
    public void receiver() throws IOException {
        //1,创建Udp接收socket
        DatagramSocket socket = new DatagramSocket(8081);
        //2,创建接收字节数据区
        byte[] bytes = new byte[1024];
        //3,创建用于接收数据package包
        DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
        //4,接收数据,写入packet里面
        socket.receive(packet);

        //5,打印传输的文件
        System.out.println("接收端:" + new String(packet.getData(),0,packet.getLength()));
    }
}

先启动 revicer(),等待接收数据。如果先启动 sender(),udp 机制会使得发送端启动运行后就会关闭,并不关心传输的数据是否到达接收端。
输出:

D:\jdk\jdk1.8.0_171\bin\java.exe
接收端:你好,我是发送端
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现JavaUDP通信,可以通过以下步骤: 1. 创建一个DatagramSocket对象,指定本地端口号。例如: ``` DatagramSocket socket = new DatagramSocket(8888); ``` 2. 创建一个DatagramPacket对象,用于发送和接收数据。例如: ``` byte[] sendData = "Hello, world!".getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 9999; DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port); ``` 3. 发送数据。使用DatagramSocket的send()方法发送数据。例如: ``` socket.send(sendPacket); ``` 4. 接收数据。使用DatagramSocket的receive()方法接收数据。例如: ``` byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.receive(receivePacket); String receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); ``` 完整的代码示例: ``` import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPExample { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); byte[] sendData = "Hello, world!".getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 9999; DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port); socket.send(sendPacket); byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.receive(receivePacket); String receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("Received message: " + receiveMessage); socket.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮克克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值