![]() |
|
Модераторы: feodorv |
![]()
|
|
| rutr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.2.2008 Репутация: нет Всего: нет |
Добрый день! Вопрос такой: есть map<string, userinfo>, ключ - имя пользователя, значение - структура с данными пользователя, надо содержимое map'а передать по сети другому пользователю. использую udp. Подскажите плз как лучше это сделать? Или хотя бы как можно передать структуру по сети в двоичном виде? Заранее благодарен!
|
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
видимо как это передать, ты знаешь:
структура точно также:
map: на одном конце передаешь пары key/value, на другом их принимаешь и запихиваешь в map... протокол в данном случае неважен, все происходит аналогично записи в файл. |
||||||
|
|||||||
| rutr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.2.2008 Репутация: нет Всего: нет |
спасибо за подсказку, только так как написано не сработало, я сделал так:
struct A { int x; int y; char str[32]; }; char *buf = new char[sizeof(A)]; memcpy(buf, &a, sizeof(A)); sendto(sSocket, buf, sizeof(A)); delete []buf; только все же остается вопрос о передачи map'а по сети, так как передавать по паре "ключ - значение" прийдется 255 раз, а надо как можно меньше посылок. |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
не получится, map - динамическая структура (дерево). a 255 не так уж и много... можно конечно пары ключ/значение вытащить из map, поместить в массив и его скопом передавать, но смысла имхо в том большого нет.
sendto принимает char*? тогда просто приведи к нужному типу:
|
||||||
|
|||||||
| korian |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
а в чем проблема? создайте буфер в 255 раз больше и все...
только учитывайте, если клиент и сервер будут компилироваться с разными настройками или разными компиляторами, то величины sizeof(A) могут быть для них разные (из-за выравнивания или еще какой фигни). |
||||
|
|||||
| rutr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.2.2008 Репутация: нет Всего: нет |
спасибо, это я понял, а теперь стал вопрос, какое максимальное количество байт я смогу передать за 1 раз по udp? то есть могу ли я передать широковещательную или обычную посылку размером 4096?
Это сообщение отредактировал(а) rutr - 2.4.2008, 17:36 |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
судя по этому, максимум можно впихнуть 65527 байт данных в один UDP пакет.
Это сообщение отредактировал(а) korian - 2.4.2008, 19:07 |
|||
|
||||
| rutr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.2.2008 Репутация: нет Всего: нет |
Спасибо за помощь, тема закрыта!
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |