Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

строку через сокет на определенный комп   Найти похожие ветки 

 
саф ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.032 c
3-41065
Sugrob
2003-10-23 19:38
2003.11.13
SELECT!!! Извлечение данных по дню месяца и месяцу года.


4-42302
maxi
2003-09-09 12:21
2003.11.13
Как програмно открыть файл с заданным расширением(например .rm)?


4-42260
Andriy Tysh
2003-09-13 13:14
2003.11.13
WM_HSCROLL?


3-41035
AnS
2003-10-14 19:19
2003.11.13
BDE Error 12289 : $3001


14-42108
Незнайка
2003-10-23 02:04
2003.11.13
Хотел узнать термин