PDA

Просмотр полной версии : UDP proxy (Borland C++)(help?)


Jes
26.05.2007, 14:21
Суть: Решил написать на С простенький udp proxy. для одного клиента пишется за 10 минут.

но как организовать сервер для большого количества клиентов? точнее как заставить его различать , кому именно адресованны пакеты?

_Great_
26.05.2007, 14:22
Составлять таблицу открытых соединений =)

Jes
26.05.2007, 22:45
хммм, я продумал принцып...
но он может быть не удобен т к ... приходится использовать несколько(или много) портов...и впринципе
http://img516.imageshack.us/img516/3421/25175753qa0.th.jpg (http://img516.imageshack.us/my.php?image=25175753qa0.jpg)
И так, приложение - сервер имеет порт с открытым IdUDPServer(обозначен синим цветом), который при запросе с нового ip проводит некую "авторизацию" , и динамически создает сокет и резервирует его для работы с этим IP. Тоесть UdpServer принимает пакет и рересылает его через соответствующий порт...
Тогда все приходящие на порт этого сокета ответы с сервера(server 1),можно будет легко переслать обратно клиенту.Тоесть отпадает необходимость програмно рыться во всех пакетах с серверов и распределять их между клиентами.Но я так и не смог придумать реализацию запроса клиента.
Тоесть: Клиент1 посылает на прокси пакет с информацией и должен послать адрес , куда этот пакет переслать.
Впринципе можно написать клиент для работы в режиме прокси, который бы менял в пакете адрес получателя на адрес прокси , а адрес получателя выделял бы для прокси как адрес для пересылки...
Но такой подход требует весьма масштабного подхода, который выводит проэкт на коммерческий уровень...
более дилетантский подход:
Можно также написать клиент, который перенаправил бы все пакеты на прокси (ну через тот же Hosts например), а вслед за каждым пакетом отправлял бы пакет с адресом для пересылки...

Ну и если такой proxy нужен в узкой специализации (для конкретного торояна, или игры) тоесть конкретный ip и порт, то он требует всего лишь настройки приложения,для которого используется udp proxy ... ( например адрес Геймспая , или еще чего нибуть в другом направлении...)

ps: если б кто-нибуть подсказал более простой способ ,был бы ему оч. благодарен...^^