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

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

строку через сокет на определенный комп [D6, Win95/98, Win2k]


саф ©   (2003-09-09 09:09:00) 

Можно ли с сервера отправить строку на определенного клиента (зная его IP). Предпологается, что номер соединения неизвестен. И аналогично - можно ли узнать IP клиента, с которого приходит сообщение (IP не заложен в самом сообщение). Или подскажите, плз, альтернаивные варианты.

Пока предполагаю, что нужно следить за соединениями, но может существует способ и попроще... :\


Digitman   (2003-09-11 08:12:00) [1]


> iWorm


см. ф-цию Winsock2 WSAAccept(), а также SetSockOpt(SO_CONDITIONAL_ACCEPT)

работает начиная с Win2000


iWorm   (2003-09-11 03:21:00) [2]

А вот действительно, как реально сделать игнор конкретной машины из Интернета?


Verg   (2003-09-10 10:44:00) [3]


> запоминать не айпишники клиентов а мак адреса


Не подскажите как из IP датаграммы, пришедшей на мой компъютер получить MAC-адрес отправителя, чтобы проверить его на наличии в черном списке ? ;)

Я подозреваю, что в большинстве случаев ее можно получить только из ethernet датаграммы, и равен он будет в 80% случаев MAC-адресу севтевой карты шлюза-маршрутизатора моего сегмента.


Zeon   (2003-09-10 02:32:00) [4]

Пару мелких советов:
- Для тренироврк дома можно коннектить клиент к серверу по имени хоста. По айпишнику 127.0.0.1 не хочет, а по имент всё ок.
- Для создания твоего чёрного списка лучше запоминать не айпишники клиентов а мак адреса. Айпи легче скрыть и они часто бывают динамическими.


Verg   (2003-09-09 17:30:00) [5]


> и тут же - дисконнект, если он нежелателен для сервера


Ну и что?

Ну не обязательно же ф-ии "черного списака" заключаются исключительно в отверженнии коннекта нежелательных клиентов - это может быть и передача сначала уведомления "о" (так сказать объяснение причины), а потом уже дисконнект.


Digitman   (2003-09-09 16:59:00) [6]


> Verg


настоящий "черный список" реализуется совершенно иначе
вот там-то IP-адрес, возможно, и сослужит полезную службу

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


Verg   (2003-09-09 16:52:00) [7]


> ну и нахрена он (RemoteAddress) нужен ?)
> глупей не придумаешь - ассоциировать петли соединений со
> строковым представлением IP-адреса ..


Ну знаешь, всякие бывают задачи...

"Черный список", например...

Не у каждого компа, имеющего статический IP есть имя хоста, так ведь?


саф   (2003-09-09 16:50:00) [8]

Ладно, спасиб. Все варианты опробую, а потом приду сюда дальше копать...


Digitman   (2003-09-09 16:42:00) [9]


> Verg


ну и нахрена он (RemoteAddress) нужен ?)
глупей не придумаешь - ассоциировать петли соединений со строковым представлением IP-адреса ..

ник там (в случае чата) или имя хоста/компа - я еще могу понять ..


Verg   (2003-09-09 16:39:00) [10]

У Socket (TCustomWinSocket) есть поле (свойство) RemoteAddress.
В нем и сидит IP адрес того клиента, который подключился к серверу.
Просматривая
ServerSocket.Socket.Connections[].RemoteAddres можно найти сокет того клиента который тебе нужен


For I:=0 to ServerSocket.Socket.ActiveConnections-1 do
begin
if ServerSocket.Socket.Connections[i].RemoteAddres=SearchIP then .......


Digitman   (2003-09-09 16:15:00) [11]


> проще сказать .. ничерта
> не дошло


если "ничерта" англицкий не знаешь - так и скажи ! чего воду-то мутить)


> Как здесь можно применить для отправки на кокретный комп
> сообщения именно айпишник или как узнать номер соединения,
> зная айпишник?


видимо, у тебя и с русским не меньшие проблемы)

по-русски же сказал тебе - не нужен тебе никакой "айпишник" !
в событии OnClientConnect() запомни где-нибудь параметр Socket - до самого дсконнекта с этим клиентом то, что ты запомнил (ссылку на объект), позволит "общаться" с данным клиентом посредством банальных вызовов Sens/Receive-методов (которые не требуют в кач-ые параметров никаких "айпишников")


саф   (2003-09-09 16:00:00) [12]

Digitman, проще сказать (вернусь к предъидущей где там мессаге) ничерта не дошло...


саф   (2003-09-09 15:59:00) [13]

Digitman, вот тут для меня и складывается проблемма! Обращаться по номеру соединения не удобно. Как здесь можно применить для отправки на кокретный комп сообщения именно айпишник или как узнать номер соединения, зная айпишник?


Digitman   (2003-09-09 15:49:00) [14]


> Теория на английском особо не дошла


что конкретно "не дошло" ?


Digitman   (2003-09-09 15:44:00) [15]

в момент установления коннекта с неким клиентом на серв.стороне возникает событие

OnClientConnect()

второй параметр процедуры обработки этого события - Socket: TCustomWinSocket, это - объект-"представитель" клиента на стороне сервера. У этого объекта есть методы (SendText/SendBuffer/SendStream), с пом. которых в любой момент времени (пока соединение существует) можно послать этому клиенту любое инф.сообщение. При этом нет нужды заботиться о том, каковы IP-адрес/порт клиента - серверная сторона вирт.петли соединения, будучи активной, "знает" эти параметры.
"Запомнив" параметр Socket где-либо в глоб.переменной, можно в любой момент времени послать клиенту, ассоциированному с этим объектом, инф.сообщение.
После завершения обработки события OnClientConnect() ссылка на тот самый объект Socket "запоминается" компонентом TServerSocket в списке активных соединений ServerSocket.Socket.Connections[] под неким i-м номером, что позволяет впоследствии обращаться к клиенту по номеру его соединения в списке, если это удобно


саф   (2003-09-09 15:29:00) [16]

TClientSocket и TServerSocket... Какие именно команды и как с ними работать?
Теория на английском особо не дошла, а вот примерчиков там я нигде не заметил. На работе Делфей нет, а дома соотвественно сетки, а то может методом проб и ошибок добился бы оответа :\


Digitman   (2003-09-09 15:07:00) [17]


> ничерта не понял


так не бывает
что конкретно не понял ? по порядку...

p.s.
для ответа на твои вопросы необходимо знать, какими средствами ты организуешь транспорт : это компоненты (какие ?) или непосредственное использование API (какое ?)


саф   (2003-09-09 15:03:00) [18]

Digitman, это хорошо, что можно. Можешь более развернуто ответить? Знаю, любишь советовать посмотреть хелп. Скажу, смотрел и ничерта не понял сразу. Подскажи, плз, команды, функции как да что! Направь на правильный путь непосвященного...


Digitman   (2003-09-09 13:47:00) [19]


> Можно ли с сервера отправить


можно


> можно ли узнать IP клиента, с которого приходит сообщение
>


можно


Наверх

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