次のコードは、次の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" をrecieves言います。私は複数のテストケースでそれを試して、クライアントは常に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が指摘しているように問題を引き起こす可能性があります。 –