java中udp的使用

在java中如何使用udp,下面一个例子进行演示,关键: DatagramSocket、DatagramPacket

服务端

package com.luoq.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.nio.charset.StandardCharsets;

public class UDPServer {

    private static final int MAX_SIZE = 1024;
    private static final int PORT = 8080;

    public static void main(String[] args) {
        DatagramSocket socket = null;
        try {
            socket = new DatagramSocket(PORT);
            System.out.println("UDP 服务端启动..");
            int index = 0;
            while (true) {
                index++;
                byte[] buffer = new byte[MAX_SIZE];
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
                // 一直阻塞,直到有客户端的数据发送过来
                socket.receive(packet);
                // 客户端发送的数据
                byte[] dataBytes = packet.getData();
                String data = new String(dataBytes, 0, packet.getLength(), StandardCharsets.UTF_8);
                System.out.println("服务端收到数据: 【" + data+"】");

                // 回执数据
                byte[] send = ("ok, 这是我第 " + index + " 次收到你的数据了。").getBytes(StandardCharsets.UTF_8);
                packet.setData(send);
                socket.send(packet);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            socket.close();
        }
    }

}

客户端

package com.luoq.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.time.LocalTime;

public class UDPClient {

    public static void main(String[] args) {
        DatagramSocket socket = null;
        try {
            socket = new DatagramSocket(10000);
            byte[] data = (LocalTime.now() + ", hello, 我在测试udp! ").getBytes(StandardCharsets.UTF_8);
            int port = 8080;
            InetAddress address = InetAddress.getByName("127.0.0.1");
            DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
            socket.send(packet);

            byte[] buffer = new byte[1024];
            DatagramPacket receiver = new DatagramPacket(buffer, buffer.length);
            socket.receive(receiver);
            String res = new String(receiver.getData(), 0, receiver.getLength(), StandardCharsets.UTF_8);
            System.out.println("客户端收到服务端的回执数据: 【" + res + "】");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            socket.close();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了数据报文式的传输,速度快、效率高。在Java,可以使用java.net包来实现UDP通信。 在Java实现UDP通信源码的关键步骤包括创建DatagramSocket对象和DatagramPacket对象、发送数据和接收数据等。 首先,我们需要创建一个DatagramSocket对象来表示UDP套接字,并指定一个端口号。例如: ```java DatagramSocket socket = new DatagramSocket(8888); ``` 然后,我们可以创建一个DatagramPacket对象,用来存储发送和接收的数据。例如: ```java byte[] sendData = "Hello, UDP".getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 8888); ``` 接下来,我们就可以使用DatagramSocket对象来发送数据和接收数据了。发送数据的方法是send(),接收数据的方法是receive()。例如: ```java // 发送数据 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("接收到的数据:" + receiveMessage); ``` 最后,需要注意在使用完DatagramSocket对象后需要关闭它,释放资源。例如: ```java socket.close(); ``` 以上就是在Java实现UDP通信的基本源码,通过DatagramSocket和DatagramPacket对象的使用,可以实现UDP协议的数据发送和接收操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值