Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Indy предварительная проверка на разрешенные IP для подключения [D6, Win2k, WinXP]


Kacnep ©   (2006-07-24 08:42:00) 

Доброе время суток! Уважаемые мастера!
Кто сам занимался или точно знает ответ просьба пособить.
Инди 10, Дельфи 6. Вопросы по IdCmdTCPServer но в принципе для любого ИНДИ сервера...
1. Вопрос.
Для чего в инди Bindings?
Смотрел кучу примеров с его использование но не разобрался.
Может кто нить что нить пояснить по этому поводу.
Есть книга Инди в глубину :). Примеры - но не понятно. Все примеры используют ЭТО.
2. Вопрос.
Как прежде чем принть подключение сервером - определить если IP не в списке разрешенных - то даже и не разрешать подключаться ему?
Я сейчас делаю так...
procedure Tf_Main.id_SrvConnect(AContext: TIdContext);
begin
 AddLog(AContext.Connection.Socket.Binding.PeerIP+' Connected!',LogF);
 if (lb_IPs.Count=0) or (lb_IPs.Items.IndexOf(AContext.Connection.Socket.Binding.PeerIP)<0) then begin
   AContext.Connection.Disconnect;
   AddLog(AContext.Connection.Socket.Binding.PeerIP+' kicked!',LogF);
 end;
end;

В этом коде мне не нравиться то что подключение вроде бы уже состоялось :(
Или я что то не правильно понял?
Заранее Спасибо всем откликнувшимся!


Kacnep   (2006-07-24 11:21:00) [1]

Спасибо Большое за ответы!
Тема закрыта.


Сергей М.   (2006-07-24 11:13:00) [2]


> Что бы это значило?


Это добавление сетевых интерфейсов, которые серверное гнездо будет обслуживать.


> что тогда означает Bindings и Binding?


Св-во Binding отражает св-ва конкретно установленного коннекта по конкретному сетевому интерфейсу.

Св-во Bindings отражает список всех сетевых интерфейсов, которые сервер будет использовать после активации.


> Каким образом можно решить задачу в оригинаолной постановке?
>  Идеи?


Отказаться от Инди в пользу любого иного аналогичного по назначению ПО, использующего механизм условного акцептирования запросов на соединение.

см. WSAAccept()


Kacnep   (2006-07-24 10:49:00) [3]

1.
Вот код из примера запуска сервера
 id_Srv.Bindings.Clear; // bindings cannot be cleared until TidTCPServer is inactive
 try
   for i := 0 to lbIPs.Count-1 do
     if lbIPs.Checked[i] then begin
       Binding:=IdTCPServer.Bindings.Add;
       Binding.IP:=lbIPs.Items.Strings[i];
       Binding.Port:=StrToInt(edtPort.Text);
       SL.append('Server bound to IP ' + Binding.IP + ' on port ' + edtPort.Text);
     end;


Что бы это значило?

2. А что тогда означает Binding sи Binding?

3. Каким образом можно решить задачу в оригинаолной постановке? Идеи?
Хотелось бы чтобы именно для неразрешенных ИП даже события коннект не наступало.

Спасибо.


Сергей М.   (2006-07-24 10:05:00) [4]


> нужно везде поубирать все что относиться к БИНДИНГу?


Так все-таки к Binding sили к Binding ? Это же разные же свойства разных объектов ..


> По поводу второго...
> Т.е. код примера приведенного мной - верен?


Верен, но он не решает задачу в оригинальной ее постановке - не допуститьконнект с конкретным IP клиента.


Kacnep   (2006-07-24 09:57:00) [5]

Еще раз спасибо за ответ.
По поводу первого...
Т.е. если я не использую несколько сетвых и не предусматриваю эту возможность в своей программе то мне (если брать кодинг из примеров) нужно везде поубирать все что относиться к БИНДИНГу?

По поводу второго...
Т.е. код примера приведенного мной - верен? После подключения я проверяю может ли он быть ко мне подлючен и если нет то Дисконект...


Сергей М.   (2006-07-24 09:01:00) [6]


> Kacnep ©   (24.07.06 08:42)


> Для чего в инди Bindings?


Для привязки гнезда к нескольким сетевым интерфейсам одновременно.


> Как прежде чем принть подключение сервером - определить
> если IP не в списке разрешенных - то даже и не разрешать
> подключаться ему?


Никак. Инди не реализует такую возможность по ряду важных причин.


Наверх

Титульная страница Поиск, карта сайта Написать письмо