Avatar billede MrJ Praktikant
30. september 2004 - 21:04 Der er 6 kommentarer og
1 løsning

Test om der er internetforbindelse i et program

Jeg skal bruge en funktion i et program til at tjekke om computeren har forbindelse til internettet.
Jeg har fundet en funktion i Windows API'en og den virker da også.
Jeg bruger Borland C++ Builder 6.
Jeg har sat følgende kode ind i en timer der tjekker en gang i sekundet om der er forbindelse.

DWORD flag ;
i++;
if ( InternetGetConnectedState ( &flag, NULL ) )
str = "Internet connection is present\n" ;
else
str = "No Internet connection\n" ;

if ( flag & INTERNET_CONNECTION_LAN )
str = "The system uses a local area network to connect to the Internet" ;
if ( flag & INTERNET_CONNECTION_MODEM )
str = "The system uses a modem to connect to the Internet" ;
if ( flag & INTERNET_CONNECTION_PROXY )
str = "The system uses a proxy server to connect to the Internet\n" ;


Når programmet kører finder den rigtigt nok ud af om der er forbindelse, men hvis man trækker netværksstikket ud, så er den omkring 7 sekunder om at opdage det i programmet, selv om den tjekker en gang i sekundet. Hvordan kan det være?
Er der andre måder at finde ud af om forbindelsen er røget når det sker i stedet for flere sekunder efter?

Noget underligt jeg har opdaget ved mit lille program er, at på en vens bærbare computer, er den omkring et minut om at opdage at forbindelsen er røget.
Jeg kunne godt tænke mig at teste programmet på nogle flere computere, og vil høre om nogen vil gøre mig den tjeneste at downloade mit program (eller source-koden, og selv compile det), og starte det op, og trække netværksstikket og se hvor mange sekunder den er om at opdage at forbindelsen er væk.
Hvis i vil gøre mig den tjeneste, må i godt skrive hvilken hardware der er i jeres computer, så jeg kan se om det har noget med CPU'en at gøre eller sådan noget.

Programmet kan downloades her: http://www.wogaming.com/stuff/testcon.exe
og source koden kan downloades her:
http://www.wogaming.com/stuff/source.rar

Mvh Effer
Avatar billede mcgoat Nybegynder
30. september 2004 - 21:23 #1
You cannot rely solely on the fact that InternetGetConnectedState returning TRUE means that you have a valid active Internet connection. It is impossible for InternetGetConnectedState to determine if the entire connection to the Internet is functioning without sending a request to a server. >>>>>>  This is why you need to send a request to determine if you are really connected or not <<<<<<<<<
Avatar billede mcgoat Nybegynder
30. september 2004 - 21:24 #2
Avatar billede mcgoat Nybegynder
30. september 2004 - 21:26 #3
Så den ser egentlig bare på om der er en netværksforbindelse, ikke om den virkelig er "Connected til internettet". Og dit problem vil jeg gætte på at det er fordi at Windows først finder ud af det lidt tid efter, for hvis der bare er et lille udsving i bare 1 sec, så behøver den jo ikke at gøre det vilde ud af det
Avatar billede mcgoat Nybegynder
30. september 2004 - 21:47 #4
Så for egenlig at vide det skal du jo pinge en eller anden Ip som du ved er oppe 24/7 og som ikke banner dig for at pinge hele tiden.. ellers ved jeg ikke hvordan du kan lave det.. hehe :(
Avatar billede MrJ Praktikant
01. oktober 2004 - 10:40 #5
ok. ved du så hvordan jeg laver en ping til en server, uden at der kommer en "vil du ringe op" frem hvis man er offline?

Jeg har fundet ICMP->Ping() fra Indy komponenten, men den funktion kræver at man har administrator rettigheder på computeren, og det er ikke godt nok til mit program.
Avatar billede mcgoat Nybegynder
01. oktober 2004 - 17:11 #6
ved jeg desværre ikke :( tror at hvis man prøver at pinge så vil den automatisk komme med "ring op"..
Avatar billede MrJ Praktikant
07. oktober 2004 - 11:34 #7
ok.
tak for hjælpen. Jeg prøver at finde på noget
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester