У меня есть две функции:
Код: Выделить всё
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
При локальном запуске это работает отлично. Моя сторона 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
Код: Выделить всё
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
Мобильная версия