| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > клиент серверное приложение по протоколу udp |
| Автор: lavan 24.7.2012, 10:46 |
| нужно организовать клиент-серверное приложение по протоколу udp.делаю так: на каждом компе есть общеизвестный udp сокет,который прослушивается отдельным потоком.когда кто-то хочет связаться с этим компом,он посылает пакет на этот сокет,получив пакет,поток прослушивающий этот сокет передает его другому потоку(обработчику),"обработчик" создает для этого соединения отдельный сокет и передает данные о новом сокете запрашивающей стороне,дальнейшее взаимодействие между этими компами происходит по этому сокету. т.е для каждого нового соединения будет создаваться новый,отдельный сокет. Правильный ли это подход? |
| Автор: Maksys 24.7.2012, 12:07 |
| А если так: 1. клиент посылает запрос на сервер по TCP с открытым для сервера udp портом; 2. в ответ сервер открывает UDP порт и отправляет в ответе на TCP запрос; 3. сервер поделючается к порту указанному в запросе, от клиента, по udp; 4. клиент берет порт в ответе и цепляетс к серверу по udp. Таким образом у нас полностью рандомная открывалка портов. со сто процентным tcp портом для связи с сервером. хотя хз. ) |
| Автор: lavan 24.7.2012, 16:15 | ||
не,tcp к сожелению использовать нельзя. ну а на счет
если я правильно понял,то если первый пакет потеряется,то,я не думаю,что посылка нового пакета будет сильно ресурсоемкой. |
| Автор: Akina 24.7.2012, 16:33 |
Не очень. Либо будут проблемы общения с клиентом за NAT, либо возможны пересечения запросов на коннект и потери запросов. Обработчик должен отдавать сведения о новосозданном сокете общему сокету, который и будет возвращать клиенту ответ по уже установленному каналу передачи. |
| Автор: lavan 24.7.2012, 18:48 | ||
здесь имеется в виду,что если пришел запрос на соединение,то после открытия нового сокета,передать данные о нем по старому сокету,и тогда сторона инициирующая соединение,дальнейшую связь будет вести по новому сокету? |
| Автор: Akina 24.7.2012, 20:05 |
| Почти так. Поступил от клиента запрос на соединение. Открывается новый сокет (на своём порте). Основной сокет отправляет клиенту сведения о новом сокете. Клиент закрывает соединение с основным сокетом, после чего открывает соединение с сокетом, загруженным специально для него. Всё как, например, в пассивном ФТП, только по УДП. Рекомендую также вместе со сведениями о созданном под клиента совете передавать некую случайную информацию, возврат которой (лучше сложномодифицированной) будет ожидать новосозданный сокет от клиента. Ну так, для доп. проверки подлинности... |
| Автор: lavan 24.7.2012, 21:04 |
| Спасибо за помощь! |