Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.076 c
1-41171
Mishenka
2003-11-02 17:51
2003.11.13
Как при создании исключения передать код ошибки?


1-41283
Mr.Ice
2003-10-31 14:22
2003.11.13
Как сделать?


1-41390
AndreyA
2003-11-04 16:41
2003.11.13
Окна


1-41630
Yanis
2003-10-26 11:17
2003.11.13
Повернуть компонент на любой угол???


9-40770
Sword-Fish
2003-04-21 10:12
2003.11.13
BASS !!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский