Вопрос

Вот мой сценарий. У меня есть приложение, написанное в C ++, но не полный источник, но «мясо» его есть. У меня также есть составленный EXE этого приложения. Он общается с сервером где -то здесь, в нашей сети. Я пытаюсь воспроизвести код C ++ в Java, однако он использует DWORDS и ссылки на память, SizeOF и т. Д., Все, что не существует в Java, поскольку он управляет собственной памятью. Он создает это большое сложное сообщение, а затем стреляет по сети. Таким образом, я в основном нюхаю трафик, осматриваю пакет и пытаюсь жесткой кодировки данных, которые он отправляет, чтобы увидеть, смогу ли я получить ответ с сервера таким образом. Однако я не могу воспроизвести сообщение идеально. Некоторые из них, такие как лицензионный код, который он отправляет, находится в «чистого гекса», то есть HEX, который переводится в ASCII, где некоторые другие части данных не являются «четким гексом», таким как «АА», который не является Перевести в ASCII (или, по крайней мере, общий набор символов ?? Если это имеет смысл, я не уверен).

В идеале я хотел бы не делать это так, но это ступенька, чтобы увидеть, может ли сервер ответить мне. Одна из функций заключается в том, чтобы приложение зарегистрировалось, и это то, что я пытаюсь воспроизвести.

Некоторые из моих предположений выше могут быть неправильными, поэтому я заранее прошу прощения. Спасибо за ваше время.

Это было полезно?

Решение

В Java все данные «символов» кодируются как Unicode (а не ASCII). Поэтому, когда вы разговариваете с чем -то снаружи, вам нужно сопоставить внутренние строки во внешний мир. Есть несколько способов сделать это:

  1. Использовать ByteArrayOutputStream. Анкет Это в основном растущий буфер байтов, к которым вы можете добавить. Это позволяет вам создавать сообщение с помощью байтов.

  2. Использовать getBytes(encoding) где кодирование - это кодирование, которую понимает другая сторона. В вашем случае это будет «ASCII» для текстовых частей.

В вашем случае вам, вероятно, нужны оба. Создайте байтовый буфер, а затем добавьте к нему строки и байты, а затем отправьте конечный результат (getByteArray()) через API сокета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top