McAffey Temat założony przez niniejszego użytkownika |
Przypisanie wyniku polecenia System(); do stringa » 2012-11-17 14:02:45 Witam. Ostatnio mam problem z internetem, a mianowicie ciągle mi przerywa połączenie. Szukam jakiegoś prostego programu który musi jedynie sprawdzać, czy jest dostęp do internetu, czy go nie ma i jeśli nie ma to gdzieś zapisywać o której godzinie. Szukałem sporo takiego programu, ale znajduję jedynie jakieś zaawansowane programy np. sprawdzające ile danych wysłałem, ile odebrałem ale żaden nie spełniał w/w funkcji. Gdy w konsoli systemowej wywołam ping'a z parametrem -t, to na wynikach widać kiedy nie ma internetu, ale nie jest to potem ujmowane w statystykach podsumowania. Tzn jak przez godzinę zostawiłem konsolę z pingiem, to co parę minut było wyświetlane : "Odpowiedź z 192.168.1.254: Sieć docelowa jest nieosiągalna.", ale potem w podsumowanie pokazało mi, że straciłem tylko 3 pakiety. W związku z tym, stwierdziłem, że może sam sobie taki program napiszę, i chyba najprościej by było, gdyby udało się wyniki polecenia System() gdzieś przypisywać, wówczas z nich bym zliczał np. ile razy zdanie "Sieć docelowa jest nieosiągalna" występuje i miał to czego potrzebuję. Jednak nie znam sposobu aby te wyniki otrzymać. Tzn jeśli wywołam te polecenie, to są one wypisywane na ekran, ale ja je potrzebuję mieć w pamięci. Bo bawić się z lepszymi poleceniami do pingowania (np. w WinAPI) raczej mi się nie chce. Jeśli znacie odpowiedź na powyższe pytania, albo jakiś prosty program który rejestruje braki w dostępie do internetu, będę wdzięczny za post. Obecnie sprawdzam połączenie za pomocą programu Ping 32 i zobaczę, czy on mi coś da. |
|
crash |
» 2012-11-17 18:53:49 Gotoiec, testowany, działa #include <time.h> #include <fstream> #include <stdio.h> #include <stdlib.h> #include <iostream>
using namespace std;
int main( int argc, char * argv[] ) { const char * command = "ping cpp0x.pl > res.txt"; string readed; for(;; ) { system( command ); ifstream input( "res.txt", ios::in ); input >> readed; if( readed[ 2 ] == 'd' ) { time_t rawtime; struct tm * timeinfo; time( & rawtime ); timeinfo = localtime( & rawtime ); printf( "Brak polaczenia nastapil o: %s\n", asctime( timeinfo ) ); printf( "\n\nNacisnij enter aby zakonczyc program." ); cin.ignore(); return 0; } } }
|
|
Admixior |
» 2012-11-17 18:59:56 1. możesz się pobawić z przekierowaniem strumieni. main.exe: uruchamia:system("sedzia.exe<ping costam"); pobiera z jakim kodem zakończyła się appka lub main.exe uruchamia:system("ping costam>plik.txt"); odczytujesz plik i oceniasz. 2. Nie musisz się bawić w ten sposób wystarczy takie coś #include <winsock2> #pragma comment(lib, "ws2_32.lib")
int main() { if( !gethostbyname( "google.pl" ) ) { } else { } }
jak cache na twoim routerze będzie zapisywać ip to możesz próbować się połączyć z googlem na jedno z ip funkcją connect: 1.Adres IP:173.194.35.151 2.Adres IP:173.194.35.159 3.Adres IP:173.194.35.152
PS.: mógłby mnie ktoś oświecić w jaki sposób przykładowa funkcja gethostbyname(...); zwraca adres tak żeby nie było memleaka? |
|
xevuel |
» 2012-11-17 19:10:53 Można też pobawić sie tym: http://msdn.microsoft.com/en-us/library/96ayss4b(v=vs.71).aspx. Problem może być tylko z symulowaniem wprowadzania danych, nie udało mi się tego wykombinować... //edit: PS.: mógłby mnie ktoś oświecić w jaki sposób przykładowa funkcja gethostbyname(...); zwraca adres tak żeby nie było memleaka? |
Nie specjalnie rozumiem o co chodzi, możesz mi wyjaśnić? :) |
|
Admixior |
» 2012-11-17 19:24:22 Nie specjalnie rozumiem o co chodzi, możesz mi wyjaśnić? :) |
Wiem że to nie mój temat ale... ;]chodzi o to że gethostbyname(..) zwraca adres do miejsca w pamięci. Z tym że ona sama to miejsce rezerwuje i nikt je nie zwalnia. |
|
xevuel |
» 2012-11-17 19:34:02 Można utworzyć w funkcji statyczny obiekt, którego destruktor zająłby się zwolnieniem pamieci ;] |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2012-11-18 11:58:25 Wczoraj nie miałem czasu na sprawdzenie, więc dopiero dziś odpisuję. @crash dzięki wielkie, dobry sposób, więc z niego skorzystam. @Admixiormain.exe uruchamia:system("ping costam>plik.txt"); odczytujesz plik i oceniasz |
Na takiej zasadzie działa sposób Crash'a, więc też dzięki za podanie :) A co do sposobu z gethostbyname();, to nie bawiłem się nigdy na połączeniach sieciowych, ale ten sposób zwraca mi ciągle informację, że internetu nie ma, a WSAGetLastError zwraca kod 10093. |
|
xevuel |
» 2012-11-18 12:04:24 |
|
« 1 » 2 |