Как эффективно отправлять массив данных по протоколу udp между c и java

#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, позволит вам легко изменять передаваемые данные и восстановит весь требуемый шаблонный код.