如何在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
相关产品推荐
相关产品推荐

