Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Вниз

TServerSocket: как отфильтровать подключаетмых клиентов?   Найти похожие ветки 

 
ai   (2002-11-06 07:55) [0]

Всем доброе время суток! У меня нарисовалась проблемка: надо отфильтровать (разрешить или запретить доступ) для подключаемых клиентов к серверному сокету по какому-либо списку IP-адресов или имен компьютеров (сокет блокирующий). Пробовал это сделать в событиях OnAccept, OnGetSocket, OnGetThread
писал что-то вроде:

{Проверка IP по списку}
....
if Проверка_не_прошла Then Socket.Close;

Так вот. Первый раз клиент отсоединяется. Но при второй попытке клиент все-таки присоединяется (судя по состоянию его сокета), но на сервере при этом никаких событий OnAccept, OnGetSocket, OnGetThread уже не возникает!? Как будто после первого отсоединения сервер еще раз создает сокет... :(
Что надо еще сделать, чтобы отсоединение было "полноценным"?
Или может фильтровать в другом событии?


 
Polevi   (2002-11-06 09:12) [1]

выбрось T..Socket и пиши все на api
WSAAccept тебе нужен


 
ai   (2002-11-06 09:51) [2]

>Polevi
переписать все проги заново?! спасибо, конечно. может я так и сделаю, но не сейчас. Сейчас надо внести дополнение в существующие...

Есть ли еще предложения?


 
Digitman   (2002-11-06 10:13) [3]


> ai


WSAAccept() - единственный корректный и верный способ заставить сервер выполнить действительно условный акцепт. TServerSocket, к сож., не использует этот вызов, а ,следовательно, безусловно акцептирует все кл.запросы на соединение (см. Accept()).


> Есть ли еще предложения?


Иных предложений нет и быть не может, если ты хочешь получить настоящий условный акцепт.
Переписывать "все проги заново" совершенно не обязательно, достаточно переписать код компонента TServerSocket (с учетом доп.возможностей вызова WSAAccept), выкинуть из палитпы стандартный компонент ServerSocket и включить в нее доработанный ServerSocket с неким новым событием типа OnConnectionRequest(). После этого во всех "прогах" будет достаточно предусмотреть небольшие участки доп.кода, обрабатывающего такое событие и возвращающее (как результат "фильтрационной" обработки) некий признак типа AcceptRequest (акцептировать текущий запрос на соединение) или RejectRequest (отвергнуть текущий запрос на соединение)


 
ai   (2002-11-06 10:42) [4]

>всем

Спасибо за раъяснения. Не подкинете-ли ли ссылочки с описанием работы WinSocks и примерами реализации на WinAPI?


 
GoodMan   (2002-11-06 10:47) [5]

Ну почему люди сами создают себе поблемы...

Загляни на http://www.nevrona.com/indy - и будещь приятно удевлен.


 
Digitman   (2002-11-06 11:09) [6]

http://books.itep.ru


 
ai   (2002-11-06 12:39) [7]

ха! нет проблем на Delhi6 ;\ Я что-то не понял начет лицензии для других версий Делфи


 
Digitman   (2002-11-06 12:46) [8]


> нет проблем на Delhi6


Каких "проблем" ?


 
KPOT   (2002-11-06 13:27) [9]

Kak variant mozhesh poprobovat" ustanovit" ServerSocket.ThreadCacheSize := 0

ThreadCacheSize - количество клиентских процессов (Thread), которые будут кэшироваться сервером. Здесь необходимо подбирать среднее значение в зависимости от загруженности Вашего сервера. Кэширование происходит для того, чтобы не создавать каждый раз отдельный процесс и не убивать закрытый сокет, а оставить их для дальнейшего использования.


 
Digitman   (2002-11-06 13:36) [10]

>KPOT

Ты вообще о чем ? Какое отношение все это имеет к реализации условного акцепта ?


> ThreadCacheSize - количество клиентских процессов (Thread),


Thread - это кодовый поток, а не процесс.


> Кэширование происходит для того, чтобы не ... убивать закрытый сокет, а оставить ... для дальнейшего использования.


Гнездо (TServerClientWinSocket) после корректного разрыва канала кл.транспорта всегда уничтожается. Никакого отношения ни к кэшированию ни тем более к условному/безусловному акцепту функциональность и время жизни этого объекта не имеет, не выдумывай.


 
ai   (2002-11-06 14:10) [11]

>Digitman

"нет проблем" - в смысле (если я правильно понял) компоненты Indy входят в поставку Delphi6. Я пишу на D5


 
Digitman   (2002-11-06 14:18) [12]

>ai
Можно установить Indy в Д5 и как автономный набор компонент.
Только вот стоит ли ?


 
ai   (2002-11-06 14:44) [13]

>GoodMan

А действительно, стоит ли? чем они так хороши? Кто-нибудь что-то законченнное на них написал?


 
Digitman   (2002-11-06 14:50) [14]

>ai

Есть, кстати, еще один вариант, достаточно "изуверский" и технически не самым простым способом реализуемы, но зато не требующий переделки TServerSocket)

Достаточно перехватить вызов WinsockAPI.accept() и подменить безусловный результат его работы на результат явно вызываемой (в теле ф-ции-обработчика перехвата) WinsockAPI.WSAAccept()


 
ai   (2002-11-06 14:59) [15]

интересно, интересно!


 
Digitman   (2002-11-06 15:08) [16]

>ai

Надеюсь таки - ты не в цирк пришел, где тебя "веселить" да "развлекать" будут, пока ты, развалившись в кресле, заложив ногу на ногу и лениво жуя бутерброд, праздно наблюдаешь за развитием "действа")))

Пару вполне дельных советов по сути вопроса ты получил. Изучай их детально и действуй !



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-15269
4D man
2002-12-16 19:13
2003.01.06
Калькуляторы


3-14906
adolf_99
2002-12-13 12:55
2003.01.06
Помогите


1-15035
adolf_99
2002-12-24 19:28
2003.01.06
Помогите


3-14964
Лесник
2002-12-15 00:01
2003.01.06
Кak cоздать БД M$ Access в рантайме


7-15331
zalviko
2002-10-27 14:44
2003.01.06
Вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский