Avatar billede omen Nybegynder
17. november 2003 - 01:26 Der er 19 kommentarer og
2 løsninger

Tjekke om der er forbindelse til nettet

Jeg har i mit program en Check for Update funktion.

Men før jeg fyrer den af, vil jeg så godt lige tjekke om personen har forbindelse til internettet.

if (forbindelse til internettet)
fortsætter min funktion
else
så gør den noget andet, f.eks en MessageBox, med at den ikke har ordenlig forbindelse til nettet!
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 01:50 #1
Den oplagte måde at gøre det på, er ved at lade den smide en exception når der ikke er forbindelse. Du udfører altså bare det du vil, og antager at der er forbindelse. Hvis der så viser sig ikke at være forbindelse alligevel, bliver der smidt en WebException.
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 01:50 #2
catch (WebException e) {
                Console.WriteLine("WebException. "+e.Message);
                if (e.Status.Equals(System.Net.WebExceptionStatus.ProtocolError)) {
                    f.onError(2, "Update-serveren er midlertidigt lukket.", true);
                }
                else if (e.Status.Equals(System.Net.WebExceptionStatus.ConnectFailure)) {
                    f.onError(2, "Der kunne ikke oprettes forbindelse til update-serveren.", true);
                }
                else if (e.Status.Equals(System.Net.WebExceptionStatus.NameResolutionFailure)) {
                    f.onError(2, "Din netforbindelse eller update-serveren er nede.", true);
                }
                else {
                    f.onError(2, "Ukendt problem med forbindelsen", true);
                }
            }
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 01:53 #3
Jeg mener det er NameResolutionFailure du får hvis du tager netkablet ud af maskinen, så det er nok den du skal bruge. Du behøver dog ikke være så konkret hvis du ikke gider. Du kan bare gøre sådan:

catch (WebException e) {
  MessageBox.Show("Fejl med netværksforbindelsen");
}
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 01:57 #4
Du skal ikke tage dig af mine underlige f.onError, det er bare nogle metoder i det program jeg har taget det fra. De sender netop en popup til klienten :)
Avatar billede omen Nybegynder
17. november 2003 - 02:03 #5
Ok, mit program prøver ikke direkte at få forbindelse til internettet. Jeg har indsat en WebBrowser control, og når jeg trykker på en knap bliver denne henvist til at hente en side, som så fortæller om der er, eller ikke er en update. Hvis der ikke er forbindelse, bliver den standard side bare vist: 'Internet Explorer was unable to link to the Web page you requested. The page might be temporarily unavailable' Og det er jo ikke så pænt at have midt inde i et program!
Er der en måde, at når jeg trykker på en knap, så tjekker den på en eller anden måde om der er adgang til nettet. Hvis der ikke er, så skal et Panel BringToFront(), og hvis det er, så skal to timere aktiveres samtidig med der åbnes et andet Panel! Men det er så ligemeget...jeg tænkte måske bare, at hvis den tjekker om den HTML jeg henter til WebBrowser, er tilgængelig, eller ikke(foretrukket, fordi så kan den melde fejl enten om MIN server er nede, eller om det er personens internet det er galt med)! Eller hvis den bare på go gammel dags hvis tjekker, er personen online eller ikke?
Hvis du har brug for mere tid til at finde ud af det, så sætter jeg gerne flere point på...!
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 02:12 #6
Jeg foreslår du opretter en forbindelse til det websted du vil vise. Du bruger ikke forbindelsen til noget, men du opretter den bare alligevel - hvis den ikke smider en exception, betyder det der er forbindelse og du kan vise siden i din browser.
Avatar billede omen Nybegynder
17. november 2003 - 02:13 #7
Kan du lave koden, som du gjorde tidligere? Har aldrig arbejdet med Try, Catch, så aner ikke hvor jeg skal begynde!
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 02:14 #8
Evt. en anden løsning: Hvis browseren er 'indvendig' i dit program, altså ikke en ekstern proces af IExplore.exe, så må du kunne tjekke hvad det er for noget html der kommer ind i den. Du kan tjekke på nogle bestemte nøgleord som du ved kommer når forbindelsen til Nettet er nede.
Avatar billede omen Nybegynder
17. november 2003 - 02:18 #9
Ved jeg ikke hvordan jeg gør :'(
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 02:20 #10
try {
                System.Net.HttpWebRequest.Create("http://www.gyxi.dk");
                // Hvis du når hertil er det gået godt og der er forbindelse
            }
            catch (WebException we) {
                // Hvis du når hertil er der ikke forbindelse (eller evt. noget andet lign. galt)
                MessageBox.Show(this, "Der skete en fejl med netforbindelsen.\n\nFejlbeskrivelse fra Windows:\n"+we.Message, "Fejl");
            }

Husk using System.Net;
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 02:20 #11
Ovenstående er ikke testet - men jeg _tror_ det virker.
Avatar billede omen Nybegynder
17. november 2003 - 02:25 #12
Hvor specifisere jeg, hvad der skal ske, hvis der IKKE kommer nogen exception?
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 02:28 #13
Efter din try catch

try {
  // Forsøg at oprette forbindelse
}
catch (WebException we) {
  // Her definerer du hvad der skal ske hvis der ikke er forbindelse
}
// Her definerer du hvad der skal ske hvis der er forbindelse


Hvis der ikke er forbindelse, er det kun catch'en der bliver udført, alt det efterfølgende bliver ikke udført.
Avatar billede omen Nybegynder
17. november 2003 - 02:33 #14
Undskyld min dumhed, men hvad mener du med 'Efter din try catch'? Skal den kode være lige efter den forhenværende kode du skrev?
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 12:55 #15
Gør ligesom der står i kommentarerne lige efter jeg skrev "efter din try catch"
Avatar billede omen Nybegynder
17. november 2003 - 13:28 #16
Ok, så har jeg flg.:

private void button1_Click(object sender, System.EventArgs e)
  {
    try
    {
    System.Net.HttpWebRequest.Create("http://www.f.fdk");
    }
    catch (WebException we)
    {
    MessageBox.Show("Ingen forbindelse");
    }
    MessageBox.Show("Forbindelse til internettet!");
}

Men lige meget bliver 'Forbindelse til internettet' altid vist. Også selv om jeg skriver en hel vanvittig url, og også selvom jeg afbryder internettet forbindelsen helt!
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 13:56 #17
ok, så er det mig der har begået en fejl. Prøv at udskifte System.Net.HttpWebRequest.Create("http://www.f.fdk"); med følgende.

XmlTextReader xmlReader = new XmlTextReader(@"http://www.gyxi.dk");

Det er det jeg gør i mit program. Nu er vi ude i noget som der sikkert er en anden mere oplagt løsning til.

husk using System.Xml;
Avatar billede omen Nybegynder
17. november 2003 - 15:18 #18
Det er det samme som før!
Avatar billede nielsbrinch Nybegynder
17. november 2003 - 17:08 #19
Der kommer sikkert én forbi om lidt der lige kan give det sidste skub ... finde en eller anden kommando der fremtvinger en exception hvis forbindelsen ikke er tilstede. Jeg kan åbenbart ikke lige hitte én.
Avatar billede Slettet bruger
18. november 2003 - 18:54 #20
Avatar billede nielsbrinch Nybegynder
18. november 2003 - 19:17 #21
smart :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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