Работает над обновлением моего приложения, которое использует сокеты для связи из python в программу C, чтобы использовать заголовки фиксированной длины в качестве протокола при отправке сообщений.
В качестве тестового примера моего C Код клиента:
/*
Socket definition code put inside here
*/
char test2[] = "hello this is a test";
uint32_t test = sizeof(test2); //Get size of message and store in 32bit int
uint32_t test_conv = htonl(test); //Convert to network byte order
header = send(ConnectSocket, &test_conv, sizeof(uint32_t), 0); //Send size of message
body = send(ConnectSocket, test2, sizeof(test2), 0); //Send the actual message
Вот выдержка из python Код сервера:
msg = clientsocket.recv(4)
msg_length = int.from_bytes(msg, sys.byteorder) //Get the header with the message length
msg_length = socket.ntohl(msg_length)
if len(msg) > 0:
print(f"This message length: {test} ")
msg = clientsocket.recv(msg_length) //Get the message
if len(msg)>0:
print(f'Message is: {msg.decode("utf-8")}')
Вывод Server.py:
The message length: 21
Message is: hello this is a test
Я опускаю заголовки сокетов и прочее, а также проверка ошибок для экономии места в этом посте.
Это безопасный способ go использовать заголовки фиксированной длины? Я не ожидаю большого количества трафика c, и я буду посылать только предложение или две информации в каждом сообщении.
Мой последний вопрос: почему при вызове send in C я использую '& test_conv' для параметра сообщения. Разве это не просто отправка значения адреса для переменной test_conv. Разве мне не нужно отправлять реальное сообщение, а не адрес?
Спасибо за любую информацию и, пожалуйста, предоставьте любые ссылки на ресурсы, если я должен использовать другую реализацию.