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);
System.out.println(packet.getLength()) 確認長度。packet.getAddress() 和 packet.getPort() 原路發送。