17. november 2003 - 01:26Der 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!
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.
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); } }
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"); }
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 :)
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å...!
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.
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.
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"); }
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.
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!
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.
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.