You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中通过UDP协议发送JSONObject?

在Java中用UDP发送JSONObject的实现方案

嘿,我来帮你把TCP的发送逻辑改成UDP版本!UDP和TCP的核心区别在于它是无连接、不可靠的传输协议,所以不需要像TCP那样维护一个持久的Socket连接,而是通过DatagramSocket和DatagramPacket来完成数据发送。

下面是对应你TCP代码的UDP实现:

import org.json.JSONObject;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;

public class UdpJsonSender {
    // UDP不需要长期持有输出流,直接用DatagramSocket发送
    public void sendToConsumer(JSONObject jsonOb, String targetIp, int targetPort) {
        // 1. 把JSONObject转换成UTF-8编码的字节数组
        byte[] jsonBytes = jsonOb.toString().getBytes(StandardCharsets.UTF_8);
        
        try (DatagramSocket datagramSocket = new DatagramSocket()) {
            // 2. 构建目标地址
            InetAddress targetAddress = InetAddress.getByName(targetIp);
            // 3. 创建UDP数据包,封装数据、目标地址和端口
            DatagramPacket packet = new DatagramPacket(
                jsonBytes,
                jsonBytes.length,
                targetAddress,
                targetPort
            );
            // 4. 发送数据包
            datagramSocket.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

和你TCP代码的核心区别:

  • UDP不需要提前建立连接,每次发送只需要指定目标IP和端口即可
  • 不需要OutputStreamWriter,直接把JSON字符串转成字节数组发送
  • 使用try-with-resources自动关闭DatagramSocket,避免资源泄漏
  • UDP没有“flush”的概念,因为它是一次性发送完整的数据包

注意事项:

  • UDP是不可靠的,无法保证数据包一定能到达目标端,也不保证顺序。如果需要可靠传输,你得自己实现重传、排序逻辑,或者考虑用TCP(如果业务允许)
  • 每个UDP数据包的大小有限制(一般建议不超过1472字节,避免IP分片),如果你的JSONObject太大,需要考虑拆分或者改用其他方式传输

内容的提问来源于stack exchange,提问作者justintime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:12:21