Получение неправильных байтов через сокет. Клиент C++ для клиента PythonC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение неправильных байтов через сокет. Клиент C++ для клиента Python

Сообщение Anonymous »

Отправка C++ uint32_t клиенту Python через сокет TCP.
У меня есть две функции:

Код: Выделить всё

void send_int(uint num)
{

num = 255; //Assign to 255 for debug purposes
num = htonl(num);

uint8_t* byte_pointer = reinterpret_cast(&num);
for (std::size_t i = 0; i < sizeof(num); ++i)
{
cdbg_print_to_info_channel("%02X ", byte_pointer[i]);
}

ssize_t sent = 0;
const uint8_t* data = reinterpret_cast(&num);
while (sent < ssize_t(sizeof(num)))
{
ssize_t ret = ::send(clientfd, data + sent, sizeof(num) - sent, 0);
if (ret < 0)
{
// TODO
break;
}
sent += ret;
}
cdbg_print_to_info_channel("Sent 255");

}
И:

Код: Выделить всё

   def receive_int() -> Optional[int]:
breakpoint()
int_data = server.recv(4)
breakpoint()

print(int_data)

if len(int_data) < 4:
print("Error receiving int!")
return None

number = struct.unpack('!I', int_data)[0]
print(number)
return number
Которые предназначены для простой отправки и получения uint32_t от клиента CPP к клиенту Python.
При локальном запуске это работает отлично. Моя сторона CPP печатает следующую информацию:

Код: Выделить всё

[17063.126393] (mali-cpu-comman) 00
[17063.126409] (mali-cpu-comman) 00
[17063.126416] (mali-cpu-comman) 00
[17063.126423] (mali-cpu-comman) FF
[17063.126432] (mali-cpu-comman) Sent 255
в функции send_int, а функция get_int Python печатает:

Код: Выделить всё

b'\x00\x00\x00\xff'
255
Это ожидаемое поведение.
Проблема возникает, когда у меня есть клиент cpp на другом компьютере. Клиент CPP печатает ту же информацию, но клиент Python печатает:

Код: Выделить всё

b'\x14\x01\x02\x00'
335610368
Поведение, по крайней мере, единообразно: «неправильный» вывод будет каждый раз одинаковым, а не просто случайной последовательностью байтов.
Я подозревал, что это произошло из-за порядка байтов, но я совершенно уверен, что это не так, поскольку порядок байтов очевиден для обоих случаев, но я могу как-то ошибаться.
Может ли кто-нибудь понять, почему это может быть проблемой?
До сих пор я пытался изменить порядок байтов пакетов, которые я отправляю через клиент CPP, и то, как я их распаковываю на стороне Python. Я пытался перехватить пакеты и просмотреть их через Wireshark, но это оставило меня в полном неведении.

Подробнее здесь: https://stackoverflow.com/questions/787 ... hon-client
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»