![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TServerSocket, как узнать IP клиента при подключении.
ZV © (2010-09-09 18:21:00)Хочу в событии
ServerSocketClientConnectопределить адрес подключившегося клиента
Сверить его с базой разрешенных IP и если его там нет то отключить
Я так понимаю что для этого надо использовать функции
ServerSocket.Socket.Connections[].RemonteAddress;
ServerSocket.Socket.Connections[].Close;
Но не пойму как . По идеи в событии ServerSocketClientConnect я должен узнать номер подключения а уже по номеру подключения при помощиServerSocket.Socket.Connections[].RemonteAddress;определить IP.
И ещё мне не понятно какому типу переменной присваивать значение функцииServerSocket.Socket.Connections[].RemonteAddress;ведь IP адрес имеет такой формат 172.17.200.2; ?
FireMan_Alexey (2010-09-09 21:50:00) [101]>ZV ©
Читаем пост [12] :)
Проще не будет :)
Под вопросом я имел ввиду № октека, который тебе нужен для сравнения
Или вообще сравнивай весь адрес, как сказал Дядя Толя :)
А он плохого не посоветует :)
ZV (2010-09-09 21:49:00) [102]Я думал может есть более изящные методы, ну раз так тогда оттяпаем шматок, преобразуем ,сравним.
Сергей М. (2010-09-09 21:45:00) [103]
> а проще не как, других вариантов нет?
Тебе шашечки или ехать, я не пойму ?)
ZV (2010-09-09 21:40:00) [104]
> Ну оттяпай шматок строки после последней точки в адресе,
> преобразуй его в Integer - вот тебе и "последнее число"
>
Не фига себе метод а проще не как, других вариантов нет?
FireMan_Alexey (2010-09-09 21:38:00) [105]Анатолий имел ввиду :)
var
Address:Array [0..3] of Byte;
Begin
Integer(Address):=Socket.RemoteAddr.sin_addr.S_addr;
If Address[?]=2 Then "Format C:"
...
End;
Сергей М. (2010-09-09 21:33:00) [106]
> ZV © (09.09.10 21:04) [10]
Ну оттяпай шматок строки после последней точки в адресе, преобразуй его в Integer - вот тебе и "последнее число"
ZV (2010-09-09 21:04:00) [107]У меня ступор с IP не пойму как этим LongRec().Bytes[3] воспользоваться
Весь IP я проверять все таки не буду в моей ситуации это не нужно .
Поэтому для контроля мне нужно последнее число в ip адресе
a:Byte;
a:= Socket.RemoteAddress;
как сделать так чтобы в переменной а оказалось последнее число в IP адреса?
Anatoly Podgoretsky (2010-09-09 20:56:00) [108]Хранение полностью цифровых значение благоприятно сказывается на скорости. Сравнение Integer наиболее быстрая операция.
ZV (2010-09-09 20:30:00) [109]
> Ты два раза повторил ремонтный, это означает, что это не
> опечатка.
Угу
> LongRec().Bytes[3]
не пойму как
> Cледующая ошибка, не надо в базе хранить последний октет
> ИП, храни полность
> или строковое или цифровое представление, цифровое лучше,
> быстрее и размер
> меньше в три раза.
А время на проверку уйдет больше, то ли один байт сверит а так весь IP
ZV (2010-09-09 20:05:00) [110]
> Label10.Caption := Socket.RemoteAddress;
Да так проще. С определением IP, разобрался. А вот как работать с полученным IP не пойму
Anatoly Podgoretsky (2010-09-09 20:05:00) [111]> ZV (09.09.2010 19:50:04) [4]
Не надо ничего преобразовывать RemoteAdr уже число, и можно обращаться к
любому байту через приведение LongRec().Bytes[3]
Cледующая ошибка, не надо в базе хранить последний октет ИП, храни полность
или строковое или цифровое представление, цифровое лучше, быстрее и размер
меньше в три раза.
remonte - ремонтный, remote - удаленый
Ты два раза повторил ремонтный, это означает, что это не опечатка.
ZV (2010-09-09 19:51:00) [112]
> Но ты зря не работаешь с цифровым представлением, там все
> проще.
Да если бы я знал как
ZV (2010-09-09 19:50:00) [113]
> Не ремонтный адрес, а удаленый.
Не понял
> Это строковый формат адреса, соответсвенно тип нужен STRING
> Также есть и вариант с числом, соответсвенно тип Cardinal
Я не пойму как это 172.17.200.2 преобразовать в число и провести сравнение базы с последней цифрой IP то есть 2 .
Anatoly Podgoretsky (2010-09-09 19:37:00) [114]> ZV (09.09.2010 18:43:01) [1]
Зачем же так сложно, когда в обработчик передается Socket
Label10.Caption := Socket.RemoteAddress;
ExtractFileExt
Точку вначале сам удалишь?
Но ты зря не работаешь с цифровым представлением, там все проще.
Anatoly Podgoretsky (2010-09-09 19:31:00) [115]> ZV (09.09.2010 18:21:00) [0]
Не ремонтный адрес, а удаленый.
Это строковый формат адреса, соответсвенно тип нужен STRING
Также есть и вариант с числом, соответсвенно тип Cardinal
ZV (2010-09-09 18:43:00) [116]Сделал так
Label10.Caption:=ServerSocket1.Socket.Connections[ServerSocket1.Socket.Act iveConnections-1].RemoteAddress;
В Label10 выводиться IP подключившегося клиента правда клиент только один и будет ли это работать когда подключется ещё один не знаю, теперь не пойму как мне работать с этим IP . мне нужна последняя цифра IP для проверки с базой как её извлечь ?