Отправить пакет через сокет UDP - PullRequest
3 голосов
/ 22 февраля 2011

Я пытаюсь отправить следующие данные на сервер, который будет использовать C ++:

static int user_id; // 4 Bytes
static byte state;  // 1 Byte
static String cipher_data; // 128 Bytes
static String hash;  // 128 Bytes

static final int PACKET_SIZE = 261;

public static byte [] packet = new byte [PACKET_SIZE];

Я пытаюсь создать байтовый массив, в который я включу все из них:

ByteArrayOutputStream baos = new ByteArrayOutputStream(PACKET_SIZE);
DataOutputStream dos = new DataOutputStream(baos);
dos.write(state);
dos.writeInt(user_id);
for (int i = 0; i < cipher_data.length(); i++) {
    dos.write((byte) cipher_data.charAt(i));
}
for (int i = 0; i < cipher_data.length(); i++) {
    dos.write((byte) hash.charAt(i));
}
packet = baos.toByteArray();

Теперь у меня есть байтовый массив со всеми данными, но я не уверен, что то, что я делаю, правильно, и если все эти данные можно будет прочитать со стороны сервера. Я действительно буду признателен, если вы дадите мне несколько советов,

Спасибо

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Первое, о чем вам нужно позаботиться, это Endian-ness компьютеров источника и назначения.

Java is Big-Endian

C ++ не имеет значения, вам нужно определить, на какой машине (аппаратном обеспечении / ОС) выполняется программа-адресат.

После этого этот поток SO сможет пройти через вас.

0 голосов
/ 22 февраля 2011

Вторым является кодирование строк.Используйте String.getBytes() вместо простого преобразования символов в байты.

...