首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java UDP Socket 接收數據長度不匹配導致字符串解析異常

     編輯:程式設計疑難解答

問題現象

UDP 接收端聲明 byte[] buffer = new byte[1024],調用 receive(packet) 後,直接用 new String(buffer) 轉換字符串,導致輸出包含大量空字符或亂碼,邏輯判斷失敗。

根本原因

DatagramPacket 實際接收的有效數據長度由 packet.getLength() 返回,而非緩衝區總長度。直接用完整緩衝區構造字符串會包含未被填充的默認值(0),導致字符串長度與預期不符。

正確代碼模式

byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);

// 關鍵:使用實際接收長度
String received = new String(packet.getData(), 0, packet.getLength(), StandardCharsets.UTF_8);
System.out.println("收到: " + received);

調試建議

  1. 發送端與接收端協議約定:定長、分隔符或長度前綴。
  2. 接收後先 System.out.println(packet.getLength()) 確認長度。
  3. 若需回傳確認,使用 packet.getAddress() 和 packet.getPort() 原路發送。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved