Другие языки программирования и технологии
Помогоите с 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-сообщение принимает только полное сообщение, если какая-нибудь часть потеряется то сообщение не будет принято вообще...
Андрей Жигулев
Спасибо за помощь, но я уже сделал. Покопался в литературе и более внятно разобрался с UDP... Осознал, что нужно отталкиваться от sockaddr_in(как ты и сказал) и сразу все пошло как по маслу... Еще раз спасибо.
Дык УДП не создает соединения - тупо сразу отправляет пакет. Потому и потери возможны, но оттого же и скорость больше. А примеров и правда очень много в сети, все обсосано со всех сторон, просто гугли "UDP сокет C++", или там "клиент сервер UDP сокеты с++"
По примерам капатся... елси нету прямой необходимости в udp делай tcp
Что-бы не изобретать велосипед глянь исходники Mangos
Андрей Жигулев
Боюсь спросить... А что это вообще такое и где это искать?
Похожие вопросы
- PHP и UDP-сервер: Проблема с приёмом информации
- [Delphi] консольное приложение, UDP
- Объясните что такое Сокет и Порт
- ПОЖАЛУЙСТА!!!!Срочно помогоите с Pascal !!!Зачет горит. РЕшить не могу.
- Помогоите пожалуста очень нужна помощь!!!!
- Кто-нибудь знает знает про сокеты в Delphi как организовать сервер/клиент пересылку через интернет что для этого нужно
- Что такое сокет?
- IP-адреса и Сокеты