#java #c #arrays #udp #double
#java #c #массивы #udp #двойной
Вопрос:
Я собираюсь отправить двойной массив через сокет udp. Я использую библиотеку Winsock на c на стороне Clinet и java на стороне сервера. Моя текущая идея состоит в том, чтобы создать строку из этих двойных числовых данных и отправить. Однако я считаю, что это неуместно и требует преобразования с обеих сторон в числовые значения. Как я могу отправить эти данные более эффективно?
Я попробовал следующее, но получил сообщение об ошибке «аргумент типа «double *» несовместим с параметром типа «const char *» в функции sendto ()»
double arrayTosend[100]
int sendOk = sendto(out, arrayToSend, sizeof(arrayToSend), 0, (sockaddr*)amp;server, sizeof(server));
Комментарии:
1. Примечание: вы не можете отправлять raw
double
, если другой компьютер не использует идентичную архитектуру. Если вы хотите отправить необработанные значения, преобразуйте их в массив байтов (const char*
), как указано в ошибке.
Ответ №1:
Я предлагаю вам использовать буферы протокола Google для обработки передачи вашего массива:
- Это надежный механизм для сериализации / десериализации сообщений между удаленными и внутренними процессами.
- Он прост в использовании и изучении.
- Он сгенерирует необходимый код для получения и получения массива как в ваших процессах c , так и в java.
- Если вы измените свой массив на другой тип или решите передать дополнительную информацию — формат сообщения, используемый protocol buffer, позволит вам легко изменять передаваемые данные и восстановит весь требуемый шаблонный код.