Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на наличие подключения по лоакльной сети 
V
    Опции темы
AlenaSmr
Дата 8.5.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Доброе время суток!
Подскажите пожалуйста, как сделать проверку на наличие подключения по локальной сети.
Подробнее: я пишу программу, которая получает данные с Active Directory и при запросе 
AdsGetObject(WinNT://'+domain+'/'+usr,IADsUser,user);
если нет подключения по сети, вылетает ошибка.
Я пишу
try
AdsGetObject('WinNT://'+domain+'/'+usr,IADsUser,user);
except
application.Terminate;
end;
и это помогает, когда сервер не доступен, или такого объекта нет в деректории, а когда нет сети не спасает.
Заранее спасибо. 
PM MAIL   Вверх
Poseidon
Дата 8.5.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Самый надежный способ: пингуй сервер smile


Есть еще способ, но если подключишься при этом к инету, то может отпределить как подключение к сети.

Код
function ConnectedToLan: Boolean;
begin
  Result:= (GetSystemMetrics(SM_NETWORK) and $01 = $01)
end;
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
AlenaSmr
Дата 8.5.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



проверка на наличие инета, не подходит, так инета может и не быть, а при этом есть подключение. 
Пробовала пинговать с помощью icmp, пингующая функция булеановского типа 
пишу:
if  ping(IPAddress)=false then
application.Terminate;
а обломись, отрубаю сеть запускаю прогу, а приложение не завершается, а выполняется дальше, я понимаю, что-то не так.
Скорее проблема в этом  IP_SUCCESS = 0; 
вот я и пишу: 
if PingReply.Status = 0 then
result := true; 
Может у кого есть варианты пинга, я что-нить другое попробую
 
PM MAIL   Вверх
Poseidon
Дата 8.5.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(AlenaSmr @  8.5.2006,  16:49 Найти цитируемый пост)
пингующая функция булеановского типа 
 Это вот эта что-ли? У меня работает (есть и Ethernet и Internet)
Код
Function Ping(host:string):boolean; 
  var  params, CommandLine:string; 
       t:TStringList; 
       i:integer; 
begin 
  Params := Format('-s%d ', [32]); 
  Params := Params+Format('-c%d ', [1]); 
  CommandLine := Format('ping %s%s', [Params, host]); 
  t:=TStringList.Create; 
  ExecCmdine(CommandLine, t); 
  Result:=pos('1 received, 0% packet loss', t.text)>0; 
  t.free; 
end;  


еще посмотри вот тут: http://vingrad.ru/DELPHI-DLP-001111
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
AlenaSmr
Дата 8.5.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Спасибо, у меня все работает как надо, а помогло вот что:
http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=34633 
PM MAIL   Вверх
Poseidon
Дата 9.5.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(AlenaSmr @  8.5.2006,  18:33 Найти цитируемый пост)
а помогло вот что:
 Это как-раз из тех вариантов, когда соеденение с интернетом (через тот же модем), определяет как соеденение с сетью.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Mechanic
Дата 10.5.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: нет
Всего: 7



Цитата(AlenaSmr @  8.5.2006,  13:17 Найти цитируемый пост)
try
AdsGetObject('WinNT://'+domain+'/'+usr,IADsUser,user);
except
application.Terminate;
end;
и это помогает, когда сервер не доступен, или такого объекта нет в деректории, а когда нет сети не спасает.

А что значит "не спасает"? Позже вылетает exception?
Так его можно отловить на уровне Application. Можно заюзать TApplicationEvents.OnException.
Обычно все асинхронные сетевые исключения так отлавливаются. 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
AlenaSmr
Дата 10.5.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Спасибо, большое. 
Цитата

 Это как-раз из тех вариантов, когда соеденение с интернетом (через тот же модем), определяет как соеденение с сетью.

Я это поняла, когда использовала, сначала,думала, что не поможет, оказалась, была не права. А что касается 
Цитата

Так его можно отловить на уровне Application. Можно заюзать TApplicationEvents.OnException.


Это, действительно хороший вариант, спасибо. Сама я до этого не дошла.

Теперь программа готова и я прсто счастлива! smile 
Всем огромное спасибо! 
PM MAIL   Вверх
drkot
Дата 11.5.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



Можно определять IP адресс компьютера.
если есть то сеть сужествует (физические подключение при этом не важно главное адаптор и дрова стоят) 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Poseidon
Дата 11.5.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(drkot @  11.5.2006,  14:10 Найти цитируемый пост)
Можно определять IP адресс компьютера.
если есть то сеть сужествует
 Это смотря каким способом. Можно и 127.0.0.1 определить. Да и кто застрахован, что определится именно локальный IP, а не глобальный? В общем мпохое предложение. Самым правильным будет пинговать что-то, стабильно находящееся в сети. Например сетевой сервер.
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
drkot
Дата 12.5.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



Цитата(Poseidon @  11.5.2006,  19:54 Найти цитируемый пост)
Самым правильным будет пинговать что-то, стабильно находящееся в сети. Например сетевой сервер.

и если на компе споит дуалап получать окно подключения smile  

а типи любом сетевом интерфейсе (даже при заглушке) на открытие сокета винда не ругается.


Цитата

Можно и 127.0.0.1 определить.

это можно определить только на "localhost"
если запрашивать по "computer name" получится либо IP либо ответ о невозможности определить.
 

Это сообщение отредактировал(а) drkot - 12.5.2006, 18:11


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Poseidon
Дата 20.5.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(drkot @  12.5.2006,  18:05 Найти цитируемый пост)
и если на компе споит дуалап получать окно подключения
 Я не понял смысла этой фразы, но не думаю, что что-то стабильно нахоящееся, допустим, в локальной сети будет доступно через DualUp. Поэтому если мы это пропингуем, мы сможем узнать, подключены-ли мы в локалке. Так же и с инетом. Если мы пропингуем тот же гугл, то будем знать, что инетернет подключение доступно (не думаю что гугл будет доступен из локалки).

Цитата(drkot @  12.5.2006,  18:05 Найти цитируемый пост)
если запрашивать по "computer name" получится либо IP либо ответ о невозможности определить.
 На данных момент у меня висит 3 IP (это без localhost)
Один на локальную сеть, второй на ADSL, третий на соединение через спутник. Так вот допустим мне нужно определить есть ли у меня соединение с локалкой. Как? Даже если соединения не будет, то у меня будут еще 2 IP. По ним определять?
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
drkot
Дата 20.5.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



Этот код вернет адрес интерфейса который считается основным в системе
Код

procedure TForm1.Button1Click(Sender: TObject);
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then ShowMessage(iNet_ntoa(PInAddr(p^.h_addr_list^)^));
    end;
    WSACleanup;
  end;
end;


принципиально это таже информация что и возвращаемая консольной командой "ipconfig".

Если в системе настроено соединение с инетом через дуалап, то при попытке пинговать (или любой другой сетевой активности) система автоматически попутается установить соединение.
К примеру на ноуте: пришел подключился к локалке, получил адрес, работаеш
прога пингует сервер все класс.
Сидиш в парке и тут прога попыталась послать пинг и видиш как пошло соединение через GPRS  smile 
Пинг самый неудобные способ определения наличия сетевого подключения.
Для проверки работоспособности сервера - да; но не соединения вообще. 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Poseidon
Дата 20.5.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(drkot @  20.5.2006,  13:06 Найти цитируемый пост)
Этот код вернет адрес интерфейса который считается основным в системе
 И что? А ты не учел, что может быть несколько подключений. И так же несколько LAN подключений.

Цитата(drkot @  20.5.2006,  13:06 Найти цитируемый пост)
Если в системе настроено соединение с инетом через дуалап, то при попытке пинговать (или любой другой сетевой активности) система автоматически попутается установить соединение.
 Это смотря как пинговать. Если просто попытаешься "открыть" адрес, то конечно Винда захочет соединиться, а если попробуешь воспользоваться протоколом Ping, т.е. отослать пакет и получить ответ, то ничего видимого не произойдет.

Цитата(drkot @  20.5.2006,  13:06 Найти цитируемый пост)
Пинг самый неудобные способ определения наличия сетевого подключения.
 Пинг - самый правильный способ определения наличия сетевого подключения! Вот, может мнение Вита тебя переубедит:
Цитата
Единственный 100% достоверный способ узнать находится ли комп в интернете это скачать что-то со стабильного внешнего сервера - такого как Microsoft, Yahoo, AT&T... По другому ни одна функция локального компьютера не сможет отличить нахождение компьютера в интранете и в интернете... Я в своей программе для определения коннекта с интернетом пингую наш собственный DNS сервер, который стоит за Firewall и естественно пинговка идет через провайдера интернет. (В некоторых Firewall может быть запрещен Ping - тогда надо именно попытаться скачать что-нибудь) 

 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.