以下代碼用於通過以下formart「address,porttNum」中的簡單字符串發送。Java UDP數據包僅包含5個數據包
下面是客戶端:
ByteArrayInputStream bin = new ByteArrayInputStream(packet.getData());
DataInputStream dis = new DataInputStream(bin);
try {
System.out.println("Data in packet: " + dis.readLine());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
下面是服務器端:
byte[] sbuf = data.getBytes();
// sbuf = output.getBytes();
packet = new DatagramPacket(sbuf,
sbuf.length, packet.getAddress(), packet.getPort());
try {
socket = new DatagramSocket();
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}
說服務器發送 「ABCDEFGHI」,客戶端只臨危 「ABCDE」。我已經嘗試了多個測試用例,客戶端總是收到5個字節。任何人都可以指出我搞砸了嗎?
編輯: 對於調試目的,我甚至增加了以下內容:
try {
System.out.println("Data in packet: " + dis.readLine());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
其輸出端仍然沒有得到它正確的數據。
編輯2: 我改變了客戶端於以下內容:
String data = new String(packet.getData(), StandardCharsets.UTF_8);
System.out.println("Data in packet: " + data);
這沒有什麼區別。
目前看起來不錯。如果你的輸入中有任何換行符,''readLine()''會把它搞亂...... – f1sh
'DataInputStream'應該和'DataOutputStream'匹配。你的服務器代碼只顯示'data.getBytes()',不知道'data'是什麼,或者它是如何產生的。 'DataInputStream#readLine()'已棄用。 – AJNeufeld
你可能會嘗試使用'new String(packet.getData(),StandardCharsets.UTF_8)'''將字節轉換爲字符串。我沒有看到在這裏使用'DataInputStream'的原因。可能會導致問題,因爲@ f1sh指出。 –