Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Внизстроку через сокет на определенный комп Найти похожие ветки
← →
саф (2003-09-09 09:09) [0]Можно ли с сервера отправить строку на определенного клиента (зная его IP). Предпологается, что номер соединения неизвестен. И аналогично - можно ли узнать IP клиента, с которого приходит сообщение (IP не заложен в самом сообщение). Или подскажите, плз, альтернаивные варианты.
Пока предполагаю, что нужно следить за соединениями, но может существует способ и попроще... :\
← →
Digitman (2003-09-09 13:47) [1]
> Можно ли с сервера отправить
можно
> можно ли узнать IP клиента, с которого приходит сообщение
>
можно
← →
саф (2003-09-09 15:03) [2]Digitman, это хорошо, что можно. Можешь более развернуто ответить? Знаю, любишь советовать посмотреть хелп. Скажу, смотрел и ничерта не понял сразу. Подскажи, плз, команды, функции как да что! Направь на правильный путь непосвященного...
← →
Digitman (2003-09-09 15:07) [3]
> ничерта не понял
так не бывает
что конкретно не понял ? по порядку...
p.s.
для ответа на твои вопросы необходимо знать, какими средствами ты организуешь транспорт : это компоненты (какие ?) или непосредственное использование API (какое ?)
← →
саф (2003-09-09 15:29) [4]TClientSocket и TServerSocket... Какие именно команды и как с ними работать?
Теория на английском особо не дошла, а вот примерчиков там я нигде не заметил. На работе Делфей нет, а дома соотвественно сетки, а то может методом проб и ошибок добился бы оответа :\
← →
Digitman (2003-09-09 15:44) [5]в момент установления коннекта с неким клиентом на серв.стороне возникает событие
OnClientConnect()
второй параметр процедуры обработки этого события - Socket: TCustomWinSocket, это - объект-"представитель" клиента на стороне сервера. У этого объекта есть методы (SendText/SendBuffer/SendStream), с пом. которых в любой момент времени (пока соединение существует) можно послать этому клиенту любое инф.сообщение. При этом нет нужды заботиться о том, каковы IP-адрес/порт клиента - серверная сторона вирт.петли соединения, будучи активной, "знает" эти параметры.
"Запомнив" параметр Socket где-либо в глоб.переменной, можно в любой момент времени послать клиенту, ассоциированному с этим объектом, инф.сообщение.
После завершения обработки события OnClientConnect() ссылка на тот самый объект Socket "запоминается" компонентом TServerSocket в списке активных соединений ServerSocket.Socket.Connections[] под неким i-м номером, что позволяет впоследствии обращаться к клиенту по номеру его соединения в списке, если это удобно
← →
Digitman (2003-09-09 15:49) [6]
> Теория на английском особо не дошла
что конкретно "не дошло" ?
← →
саф (2003-09-09 15:59) [7]Digitman, вот тут для меня и складывается проблемма! Обращаться по номеру соединения не удобно. Как здесь можно применить для отправки на кокретный комп сообщения именно айпишник или как узнать номер соединения, зная айпишник?
← →
саф (2003-09-09 16:00) [8]Digitman, проще сказать (вернусь к предъидущей где там мессаге) ничерта не дошло...
← →
Digitman (2003-09-09 16:15) [9]
> проще сказать .. ничерта
> не дошло
если "ничерта" англицкий не знаешь - так и скажи ! чего воду-то мутить)
> Как здесь можно применить для отправки на кокретный комп
> сообщения именно айпишник или как узнать номер соединения,
> зная айпишник?
видимо, у тебя и с русским не меньшие проблемы)
по-русски же сказал тебе - не нужен тебе никакой "айпишник" !
в событии OnClientConnect() запомни где-нибудь параметр Socket - до самого дсконнекта с этим клиентом то, что ты запомнил (ссылку на объект), позволит "общаться" с данным клиентом посредством банальных вызовов Sens/Receive-методов (которые не требуют в кач-ые параметров никаких "айпишников")
← →
Verg (2003-09-09 16:39) [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:42) [11]
> Verg
ну и нахрена он (RemoteAddress) нужен ?)
глупей не придумаешь - ассоциировать петли соединений со строковым представлением IP-адреса ..
ник там (в случае чата) или имя хоста/компа - я еще могу понять ..
← →
саф (2003-09-09 16:50) [12]Ладно, спасиб. Все варианты опробую, а потом приду сюда дальше копать...
← →
Verg (2003-09-09 16:52) [13]
> ну и нахрена он (RemoteAddress) нужен ?)
> глупей не придумаешь - ассоциировать петли соединений со
> строковым представлением IP-адреса ..
Ну знаешь, всякие бывают задачи...
"Черный список", например...
Не у каждого компа, имеющего статический IP есть имя хоста, так ведь?
← →
Digitman (2003-09-09 16:59) [14]
> Verg
настоящий "черный список" реализуется совершенно иначе
вот там-то IP-адрес, возможно, и сослужит полезную службу
средства же упомянутых компонентов попросту не позволяют реализовать действительное отвержение кл.запроса на коннект, т.е. клиент в любом случае получит сначала подтверждение коннекта, и тут же - дисконнект, если он нежелателен для сервера
← →
Verg (2003-09-09 17:30) [15]
> и тут же - дисконнект, если он нежелателен для сервера
Ну и что?
Ну не обязательно же ф-ии "черного списака" заключаются исключительно в отверженнии коннекта нежелательных клиентов - это может быть и передача сначала уведомления "о" (так сказать объяснение причины), а потом уже дисконнект.
← →
Zeon (2003-09-10 02:32) [16]Пару мелких советов:
- Для тренироврк дома можно коннектить клиент к серверу по имени хоста. По айпишнику 127.0.0.1 не хочет, а по имент всё ок.
- Для создания твоего чёрного списка лучше запоминать не айпишники клиентов а мак адреса. Айпи легче скрыть и они часто бывают динамическими.
← →
Verg (2003-09-10 10:44) [17]
> запоминать не айпишники клиентов а мак адреса
Не подскажите как из IP датаграммы, пришедшей на мой компъютер получить MAC-адрес отправителя, чтобы проверить его на наличии в черном списке ? ;)
Я подозреваю, что в большинстве случаев ее можно получить только из ethernet датаграммы, и равен он будет в 80% случаев MAC-адресу севтевой карты шлюза-маршрутизатора моего сегмента.
← →
iWorm (2003-09-11 03:21) [18]А вот действительно, как реально сделать игнор конкретной машины из Интернета?
← →
Digitman (2003-09-11 08:12) [19]
> iWorm
см. ф-цию Winsock2 WSAAccept(), а также SetSockOpt(SO_CONDITIONAL_ACCEPT)
работает начиная с Win2000
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c