Sprawdzenie stanu polaczenia z internetem

0

Witam. Pisze program do obslugi poczty e-mail. Chcialbym napisac funkcje ktora sprawdzala mi obecny stan polaczenia z internetem, lecz nie wiem jak sie za to zabrac. Dodam że piszę pod Windowsa i wygooglowalem ze mozna jakos tak: system("ping blablabla"); ale to mnie nie satysfakcjonuje gdyz wielu programistow nie raz juz mi odradzalo uzywanie system("xx"); Bylbym wdzieczny gdyby ktos naprowadzil mnie na jakis latwy sposob rozwiazania mojego problemu.

1

I będziesz tak sprawdzał co chwila? Co będziesz pingował? A jeśli host pingowany będzie leżał?
Nie ma sensu się w to bawić. Jak dostaniesz błąd połączenia przy sesji SMTP/POP3/IMAP, to znaczy że z połączeniem prawdopodobnie jest coś nie tak. Jednakże nie ma znaczenia czy padło połączenie z netem, czy serwer poczty, czy user przez pomyłkę namieszał w konfiguracji firewalla. Istotną informacją jest, że klient poczty nie może się połączyć z serwerem.

0

Chyba wyraznie napisalem ze wlasnie nie chce stosowac tej metody. Fakt informacja ,że klient poczty nie może połączyć sie z serwerem jest wystarczająca, ale skoro już założyłem temat może ktorys z panów programistów udzieli mi jakiejś sensownej odpowiedzi... Nawet jeśli nie w tym programie to na pewno przyda mi się na przyszłość;)

0

Możesz pingować do stu różnych serwerów i jeżeli do żadnego nie dojdzie, to połączenia nie ma.
Tutaj masz najgorsze :D

0

Ale widzisz, nie ma uniwersalnej metody sprawdzenia czy jest połączenie z Internetem. Bo co to znaczy "połączenie z Internetem" od strony klienta? Czy połączenie z Internetem to jest wyjście ze szkieletu operatora? Do tego musisz znać topologię sieci ISP. A może wyjście ze szkieletu danego regionu? Albo państwa? Tutaj jest jeszcze gorzej, bo np. może paść nitka do Frankfurtu i hosty na Zachodzie Europy nie będą dostępne, ale te w Polsce będą odpowiadały bez problemu. Albo będą odpowiadały tylko te z danego regionu i np. do Poznania z Warszawy nie będziesz miał działającej drogi. Czy wtedy klasyfikujemy to jako brak dostępu do Internetu?
Internet to jest złożona sieć, a nie czarne pudełko, które działa lub nie. Ping jest najprostszą metodą testu czy mamy drogę do danego hosta (i czy ten host odpowiada), a nie do całego Internetu. Innego wiarygodnego testu nie ma, bo cała komunikacja opiera się na wysyłaniu pakietów w nadziei, że one dotrą do odbiorcy. Możesz dostać komunikat ICMP "no route to host", ale bez znajomości szczegółowej topologii i wszystkich możliwych tras nie wiesz czy to jest problem Twojego ISP, czy jakiegoś rutera hen daleko w świecie na drodze do hosta, czy też może host jest wyłączony.
Dlatego nigdzie nie masz sprawdzania dostępu do Internetu, tylko komunikaty w przypadku niepowodzenia połączenia z serwerem danej usługi.

0

Okej dotarło do mnie :D W sumie masz racje, z tej strony nie pomyślałem. Ale żeby chociaż nie zamykać tak szybko tematu moze podasz jakis sposob na pingowanie danego hosta?

0

Jeżeli zdecydujesz się na pisanie w .NET to w bardzo łatwy sposób można to zrobić. Swojego czasu, gdy miałem problem z łączem, a mianowicie co jakiś czas występowały na kilka, kilkanaście sekund takie duże skoki pingu i wyjątkowo bezczelnie UPC mnie zbywało (niech pan udowodni, u nas jest wszystko ok), napisałem sobie program, który je loguje.

http://pastebin.com/bittvD0p

0
mto9 napisał(a)

Ale żeby chociaż nie zamykać tak szybko tematu moze podasz jakis sposob na pingowanie danego hosta?

Jeśli używasz socketów, to możesz sam budować pakiety ICMP Echo Request, wysyłać i odbierać ICMP Echo Response. W Internecie znajdziesz różne źródła programów pingujących (np. ping.c z BSD).

1 użytkowników online, w tym zalogowanych: 0, gości: 1