Другие языки программирования и технологии

Помогоите с UDP сокетами! (с++)

Вобщем дело в следующем, писал я когда-то клиент-серверное приложение, использующее TCP сокеты. После подключения очередного клиента я просто-напросто загонял "его" сокет в массив сокетов ну и работал в программе дальше с этим массивом. А теперь на UDP вообще без понятия как сделать что-то подобное, так как по сути здесь нету адекватного подключения. Я могу конечно не заморачиваться и сделать обратно на TCP, но я пишу игру и в инете советуют в таких случаях использовать UDP... Помогите советом.
Ну дык ориентируйся теперь на структуру sockaddr_in по ней после возвращение вызова recvfrom получишь эту структуру, тут главные значения полей sin_port и sin_addr. Создаёшь несколько или один поток (если не критично) для получения сообщений далее закидываешь сообщение в очередь или кольцевой буфер, а в другом потоке уже отправляешь эти сообщения другому или другими юзерам, конечно не надо забывать о синхронизации очереди. Если для винды, то я использую асинхронные I/O OVERLAPPED или процедуры завершения Completion Routine. На счёт портов ввода-вывода IOCP не думаю что каждый раз дёргать пул-потоков самое оно при UDP. Ещё добавлю в игре нужно так же иметь функцию которая будет гарантировать доставку данных, например регистрация игрока, выход и т. д. То бишь по UDP реализовать нужно таким образом, посылаешь команду далее на приём данных задаёшь таймер в 5-10 секунд мультиплексером select или WSAEventSelect(только для винды), если по истечению времени не будет ответа, снова посылаешь данные, и конечно на сервере делаешь функцию для "пинга" который просто отвечает на принятие данных, на счёт контрольной суммы можно не беспокоится, UDP-сообщение принимает только полное сообщение, если какая-нибудь часть потеряется то сообщение не будет принято вообще...
АХ
Александр Харченко
11 372
Лучший ответ
Андрей Жигулев Спасибо за помощь, но я уже сделал. Покопался в литературе и более внятно разобрался с UDP... Осознал, что нужно отталкиваться от sockaddr_in(как ты и сказал) и сразу все пошло как по маслу... Еще раз спасибо.
Дык УДП не создает соединения - тупо сразу отправляет пакет. Потому и потери возможны, но оттого же и скорость больше. А примеров и правда очень много в сети, все обсосано со всех сторон, просто гугли "UDP сокет C++", или там "клиент сервер UDP сокеты с++"
Паха Зимин
Паха Зимин
8 946
По примерам капатся... елси нету прямой необходимости в udp делай tcp
Dare Devil
Dare Devil
5 921
Что-бы не изобретать велосипед глянь исходники Mangos
Андрей Жигулев Боюсь спросить... А что это вообще такое и где это искать?