powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача структуры по сети
13 сообщений из 13, страница 1 из 1
Передача структуры по сети
    #38533059
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Написав сервер с использование libevent, у меня теперь стоит задача создать структуру, с помощью которой будет происходить общение клиентов с сервером. Пока пытаюсь разобрать простые примеры. Необходимо передать структуру по сети от клиента серверу. Для получения представления, как это работает, я использую простые сокеты и их методы send и recv. Думаю, так как аналогичные методы libevent принимают и передают массив байт, как и методы для сокетов, то разницы не будет.

Пока пробую следующее:
Отправка:
Код: plaintext
1.
send(ClientSocket[1],(char *)&msg,sizeof(msg),0);


Прием:
Код: plaintext
1.
recv(Socket,(char *)&msg,sizeof(msg),0);


, где msg это объект структуры - не важно какой у неё набор полей(наверно). Естественно структуры на сервере и клиенте дублируются, то есть идентичны.
Ибо у меня с первого раза ничего не работает, этот случай не стал исключением. Собственно, пример является только одним из многих вариантов попробованных мной.
Если кто-нибудь пробовал передать структуру по сети, знает как это сделать или просто есть идея, буду рад всем вариантам.

Спасибо!
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533075
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно так как ты написал это и делается. Если у тебя что-то не работает, это твой баг.
Тебе и ловить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533080
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Хорошо, буду глядеть, что не так. Спасибо!
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533095
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
La France,

Если речь идет о бинарной передаче, то в силу того, что клиент и сервер это могут быть абсолютно разные по архитектуре хосты, а сам клиент и сервер могут быть собраны с различными настройками компилятора, тем более разной разрядностью компилятора, структуры упаковывают в так называемый сетевой формат с помощью так называемых функций конвертации

uint32_t htonl(uint32_t hostlong); — конвертирует 32-битную беззнаковую величину из локального порядка байтов в сетевой;
uint16_t htons(uint16_t hostshort); — конвертирует 16-битную беззнаковую величину из локального порядка байтов в сетевой;

на сервере в свою очередь используются обратные приведенным для конвертировки из сетевого формата в локального хоста ntohl, ntohs

Поэтому, каждый член данных структуры должен быть упакован приведенными мной функциями перед отправкой, а сама структура должна быть оформлена платформо-независимыми типами

int8_t uint8_t
int16_t uint16_t
int32_t uint32_t
int64_t uint64_t
....
которые нивелируют разрядность компилятора.

Ну, а текстовый формат ты можешь слать как угодно, хоть в JSON, хоть XML, хоть в своем собственном формате.
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533142
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковLa France,

Если речь идет о бинарной передаче, то в силу того, что клиент и сервер это могут быть абсолютно разные по архитектуре хосты, а сам клиент и сервер могут быть собраны с различными настройками компилятора, тем более разной разрядностью компилятора,


Ну вот, Толя, всю веселуху испортил...
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533156
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Ага) Через силу сейчас читаю информацию, еще и под конец рабочего дня.
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533379
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу вот, Толя, всю веселуху испортил...
Да ладно, откуда у автора возьмутся платформы с различной endianess... А int он нынче
всегда int. В отличии от long.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533549
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivНу вот, Толя, всю веселуху испортил...
Да ладно, откуда у автора возьмутся платформы с различной endianess... А int он нынче
всегда int. В отличии от long.
Это int32 всегда int32, а int он как раз таки меняется.
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533580
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlа int он как раз таки меняется.
Где, например? На x86 и x86_64 и GCC, и MSVC имеют int размером 32 бита.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533604
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А как же i8080 ?
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533888
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
Anatoly MoskovskyDimitry Sibiryakov,

А как же i8080 ?
Пример некорректен.
Если уж рассуждать на тему х86, то в DOS целое было 16 бит.
DOS, кстати, жив по сей день. http://www.freedos.org/
Какова разрядность целого в современном DOS - не знаю, давно не интересовался.
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38533889
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
Dimitry SibiryakovMasterZivНу вот, Толя, всю веселуху испортил...
Да ладно, откуда у автора возьмутся платформы с различной endianess... А int он нынче
всегда int. В отличии от long.

Не стоит по себе судить обо всем мире...
...
Рейтинг: 0 / 0
Передача структуры по сети
    #38535135
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задачу решил следующим образом: преобразую структуру в буфер на отправителе и восстанавливаю на приемнике.

Спасибо всем за советы!

Теперь стоит задача шифрования передаваемых данных используя openSSL.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача структуры по сети
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]