Как корректно проверить подключен инет или нет... PS: всякие костыли типо пингов куда то или gethostname() не катят... последний при наличнии локального подключения не работает...(хотя может это именно у меня так настроены dns в сетки)
CODE Ping Code: int pin; char * ping = "ping 8.8.8.8"; pin = system(ping); //Пинга нет; if (pin != 0) { cout << "No" << "\n"; } //Пинг есть; else if (pin == 0) { cout << "Yes" << "\n"; } Необходим инклуд <windows.h> для system и <iostream> для cout.
Все так, код рабочий. С юникодом только может налажал. Если так, то замена на InternetCheckConnectionA поможет.
Вроде она просто показывает наличие подключения по локальной сети(что сетевая есть и она работает)... А мне именно нужно проверить подключение к интернету..
тащемта венда, особенно седьмая, считает что она в интернетах, если способна разрешить ип некоторых своих хостов. так и пишется в центре управления сетями - интернет! а интернета нет. но тут и джопа. прову вашему пох на днс, все к вашим услугам на халяву, да вот только чтобы неднсный трафик пустить, нужно- логиниться на впн серваке (итд итп). поэтому самое эффективное - пинг нескольких хостов. можно корневых днсов.
Мне религия позволяет! ты пример напиши лучше! Я хотел это реализовать без использования winsock.h(что бы это меньше отражалось на весе программы), думал есть стандартные функции (wininet.h) которые могут определить есть инет или нет, вот и все...! Думаю пригодиться (если что исправляйте) использую Ip яндекса так как при попытке с моей сети подключиться на google.com на 80 порт функция connect() всегда возвращает true Code: bool GetStatusConnect() { char buff[1024]; if (WSAStartup(0x202, (WSADATA *)&buff[0])) return 0; SOCKET my_sock = socket(AF_INET, SOCK_STREAM, 0); if (my_sock < 0) return 0; sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(80); HOSTENT *hst; dest_addr.sin_addr.s_addr = inet_addr("93.158.134.203"); if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)) == -1) return 0; closesocket(my_sock); WSACleanup(); return 1; }
Это уже работает точно надеюсь кому то понадобиться! Code: bool IcmpPing() { HANDLE hIcmpFile; unsigned long ipaddr = INADDR_NONE; DWORD dwRetVal = 0; char SendData[32] = "Data Buffer"; LPVOID ReplyBuffer = NULL; DWORD ReplySize = 0; ipaddr = inet_addr("8.8.8.8"); if (ipaddr == INADDR_NONE) return 0; hIcmpFile = IcmpCreateFile(); if (hIcmpFile == INVALID_HANDLE_VALUE) return 0; ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); ReplyBuffer = (VOID*) malloc(ReplySize); dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 1000); if (dwRetVal) { PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer; struct in_addr ReplyAddr; ReplyAddr.S_un.S_addr = pEchoReply->Address; return 1; } else return 0; }