как общаться между сокетом Python и сокетом C ++? - PullRequest
0 голосов
/ 16 мая 2019

Я устанавливаю сокет TCP, который получает сообщения по двоичному протоколу. когда я посылаю строку json через python-сокет, python заставляет меня использовать функцию кодирования, а когда данные поступают на сервер, я не знаю, как сделать их текстовыми и читаемыми.

это для клиент-серверной игры, клиент отправляет запрос на вход в систему в двоичном протоколе (1 байт - код, 4 байта - длина_данных, длина_данных - {"имя пользователя": "...", "пароль": ". .. "}

пример:

Питон:

s.send("hey".encode())

C ++:

char* data = new char[3 + 1];
data[3] = NULL;
int res = recv(client_soc, data, 3, 0);
//data content is unreadable

Я ожидаю, что вывод будет 'эй', но фактический вывод ===

1 Ответ

0 голосов
/ 16 мая 2019

Вам нужно сделать две вещи:

1) Написать функцию для получения всего сообщения.

2) Написать функцию для декодирования и интерпретации сообщения.

Сначала вам нужно выполнить шаг 1, поэтому сосредоточьтесь на этом.Это выглядит следующим образом:

  1. Читайте до четырех байтов.
  2. Если у вас меньше четырех байтов, продолжайте чтение, пока не получите четыре байта.
  3. Изчетыре байта, расшифруйте длину.
  4. Если у вас есть все сообщение, остановитесь, все готово.
  5. Попробуйте прочитать сколько байтов осталось в сообщении.
  6. Переходите к шагу 4.

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

...