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

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

Нужна идея [D7, 95/98, 2000, XP, 2003]


Novice ©   (2007-05-23 11:53:00) 

Мне необходимо подключаться RAdmin'ом к нескольким компьютерам вне локалки. Проблема в том, что они не имеют стат. ip. Соответственно, перед подключением надо этот адрес узнать, причем без участия пользователей этих машин. Со своим микроопытом в программировании я не смог придумать ничего лучше использования сокета: у них клиент, который по таймеру пытается соединиться с сервером, у меня - сервер, который слушает порт и при подключении определяет ip клиента. Вроде бы это работает, но возникла проблема на клиентах: если сервер не отвечает (нет связи, сервер не запущен и т.д.), то сокет ломится по порту, на единицу больше предыдущего, т.е., сначала 7000, потом 7001, 7002 и т.д. И в какой-то момент клиентский компьютер вообще не может выйти в интернет. Наверняка есть более простой и надежный способ получения ip, но мне он в голову не идет.


SlymRO   (2007-05-23 14:50:00) [1]

DDNS для этого придумали


Сергей М.   (2007-05-23 14:22:00) [2]


> Novice   (23.05.07 14:20) [18]


Да не пробовать надо, а углубиться в исходники)


Novice   (2007-05-23 14:20:00) [3]

Пошел пробовать...


Сергей М.   (2007-05-23 13:57:00) [4]


> Novice   (23.05.07 13:47) [16]


А должно было быть так:

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
... что угодно ..
//если событие возникло в ходе попытки коннекта, то
Socket.Close; // эта строчка обязательна !
... что угодно ..

end;


Novice   (2007-05-23 13:47:00) [5]


procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 ErrorCode := 0;
end;


Файер - скорее нет, т.к. один из клиентов - Вин98, а сторонних программ этого типа там нет.


Novice   (2007-05-23 13:43:00) [6]

&
1. Невозможно открыть страницу
2. Невозможно соединиться с сервером
3. Превышен интервал ожидания для запроса


umbra   (2007-05-23 13:41:00) [7]


> клиентский компьютер вообще не может выйти в интернет

да это, наверное, файервол впадает в панику и блокирует все подключения


Сергей М.   (2007-05-23 13:41:00) [8]


> Novice   (23.05.07 13:40) [12]


Ну тады не обожгись - ошибка у тебя в обработчике OnError.


Novice   (2007-05-23 13:40:00) [9]

Горячо


Сергей М.   (2007-05-23 13:37:00) [10]


> Достаточно-ли подробно я раскрыл фразу "клиентский компьютер
> вообще не может выйти в интернет"?


Увы, интрига закручена еще хлеще)


> 1. Невозможно открыть какую-либо страницу в эксплорере


От детальных объяснений эксплорер, конечно же, отказывается)


> 2. Не работает pop, smtp


Они (протоколы !!!), видимо, тоже научились говорить фразу "не работаю")


> 3. Не работает пинг


Боюсь даже предположить - это приложение вообще молча уходит в Нирвану)

Ну что ж, попробую подключить телепатор - твой клиент "тычется" в порты средствами TClientSocket в режиме ctNonBlocking.
Тепло ?)


Novice   (2007-05-23 13:30:00) [11]


> Что, прямо так и говорит, мол, "не могу выйти в интернет"
> ?


Ну, если бы умел говорить, то ,вероятно, так и сказал бы.
1. Невозможно открыть какую-либо страницу в эксплорере;
2. Не работает pop, smtp
3. Не работает пинг.

Достаточно-ли подробно я раскрыл фразу "клиентский компьютер вообще не может выйти в интернет"?


Сергей М.   (2007-05-23 13:16:00) [12]


> клиентский компьютер вообще не может выйти в интернет


Что, прямо так и говорит, мол, "не могу выйти в интернет" ?


Novice   (2007-05-23 13:13:00) [13]


> На то и существует отладчик, чтобы искать и исправлять ошибки.


Как мне может помочь отладчик, если клиенты в других городах? На своей машине/локалке такой эффект повторить не удается.

А вот в сторону VPN надо посмотреть (у меня статика).


Сергей М.   (2007-05-23 12:28:00) [14]


> Если есть ошибка, то я не знаю, в чем она заключается


На то и существует отладчик, чтобы искать и исправлять ошибки.


Сергей М.   (2007-05-23 12:27:00) [15]


> Novice   (23.05.07 11:53)


Но самая лучшая, imho, идея - все заинтересованные хосты должны быть клиентами VPN.

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


clickmaker   (2007-05-23 12:25:00) [16]


> PS все открыто

а вот это зря :)


Novice   (2007-05-23 12:25:00) [17]

Если есть ошибка, то я не знаю, в чем она заключается. А по имени через интернет не подключишься, DNS'а нет. Сейчас сбегаю по ссылке, почитаю.


Reindeer Moss Eater   (2007-05-23 12:22:00) [18]

gethostbyname() не подойдет?

У меня имя компа "xxx". Отрезолвь попробуй адрес.
PS все открыто

:)


clickmaker   (2007-05-23 12:14:00) [19]

gethostbyname() не подойдет?
И, кстати, РАдмин разве не может по имени подключиться?


Сергей М.   (2007-05-23 12:12:00) [20]


> в какой-то момент клиентский компьютер вообще не может выйти
> в интернет


Значит ошибка в программе.


> Наверняка есть более простой и надежный способ получения
> ip


см. dynamic DNS

http://www.google.ru/search?q=dynamic+DNS&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


Наверх

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