UDPパケット(どの形式かはわかりませんが、UTF-16-リトルエンディアン-だと思います)を受信しています。私が知っているのは、次のドキュメントだけです。開発者ページから直接:
マスターサーバーはそれぞれ、FF FF FF FF 73 0Aに続いて、(比較的)一意の4バイトの「チャレンジ」番号を送信することで応答します。
だからこれは私がパケットを受信する方法です:
byte[] buff = new byte[64];
DatagramPacket packet = new DatagramPacket(buff, buff.length);
socket.receive(packet);
パケットを受信しました。すべて問題ありませんが、今は行き詰まっています。その4バイト整数が必要です。バッファを分割する必要がありますか...どうしたらよいかわかりません。
受信したデータは次のとおりです。
˙˙˙˙s
Ň?t
16進数に変換しようとしましたが、出力は非常に興味深いものです。
-0000000000000000000000000008cf52df7c08c
変換する方法:
public String toHex(String arg) throws UnsupportedEncodingException {
return String.format("%040x", new BigInteger(arg.getBytes("UTF-16LE")));
}
(上記の方法で)16進数を文字列に変換しようとした場合、結果ははるかに興味深いものになります(申し訳ありませんが、貼り付けをコピーできません。何か問題が発生します)。とにかく、16進数を文字列に変換するために使用する方法は次のとおりです。
public String hexToString(String hex){
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
String str = hex.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
return new String(output);
}
とはいえ、私は立ち往生しています。どうしたらいいのかわからない。UDPパケットを分割する必要がありますか...?