Makinemin internet erişimi olup olmadığını C/C++ kullanarak programlı olarak nasıl kontrol edebilirim, sadece bir IP'ye ping atmak mı? NIC bunu nasıl yapıyor?Makinemin internet erişimi olup olmadığını kontrol edin
Ben
Makinemin internet erişimi olup olmadığını C/C++ kullanarak programlı olarak nasıl kontrol edebilirim, sadece bir IP'ye ping atmak mı? NIC bunu nasıl yapıyor?Makinemin internet erişimi olup olmadığını kontrol edin
Ben
, sadece, aşağıdaki kod çalışacaktır bu
#include <iostream>
#include <windows.h>
#include <wininet.h>
using namespace std;
int main(){
if(InternetCheckConnection(L"http://www.google.com",FLAG_ICC_FORCE_CONNECTION,0))
{
cout << "connected to internet";
}
return 0;
}
Kullanıcı internete bağlıysa ancak google'a erişemiyorsa, [bazı oldukça büyük ülkelerde] milyarlarca insan gibi (https://en.wikipedia.org/wiki/Google_China#Ending_of_self-censorship)? –
Bence o türden bir şey yok Windows 7 kullanıyorum, ancak bu deneyebilirsiniz: Ben böyle bir şey demek
kolay yolu çalışmaktırBilinen bir dış IP adresine bağlanın.
Windows'da başarısız olursa, connect işlevi SOCKET_ERROR
ve WSAGetLastError
genellikle WSAEHOSTUNREACH
değerini döndürecektir (bu, paketin ana bilgisayara gönderilemeyeceği anlamına gelir).
Linux'ta bir -1
, ve errno ENETUNREACH
olacaktır. Bazı yararlı linkler: Windows üzerinde çalışan Eğer pencerelerde iseniz
Bir öneri olarak, yükü alabilen bir kaç "ünlü" DNS sunucusuna bağlanmayı deniyorum, "8.8.8.8" (google'ın genel DNS sunucusu). Birden fazla şirketten birden fazlasını yapın, böylelikle kısmi ağ arızasını (örneğin, aşağı inme gibi) algılayabilir ve kullanıcının aşağı ineceğini düşünürseniz bile (örneğin, İnternet erişimini zorlamasına izin verebilirsiniz) sadece sezgisel sorunlarınız olduğu için). Ayrıca, ne kadar bağlandığınıza dikkat etmeyi unutmayın - her saniyeyi kontrol etmek kaba değildir. Dahili test için, sahip olduğunuz IP adreslerini kullanın, böylece hata yaptığınızda ve spam yaptığınızda onu düzeltebilirsiniz. – Yakk
Daha da iyisi: Genelde kendi sunucunuza erişmek için İnternet erişimine ihtiyacınız var. Önce bunu dene. Ancak bu başarısız olursa (8.8.8.8) ping yapmayı denemeniz gerekir, böylece kullanıcıya sunucunuzun veya İnternet bağlantınızın olup olmadığını söyleyebilirsiniz. – MSalters
deneyin:
#include <iostream>
#include <windows.h>
int main(){
if (system("ping www.google.com")){
std::cout<<"\nNot connnected to the internet\n\n";
}
else{
std::cout<<"\nConnected to the internet\n\n";
}
system("pause");
return 0;
}
Orada aslında kod snip here dahil olmak üzere çok akıllı bir yoldur.
Temel olarak cmd seçeneğini kullanın: CMD'de iken: route print
.
Bu, yönlendirme tablosunu bir diziyle eşleştirecek ve mevcut bir İnternet bağlantısı olarak 0.0.0.0 değerini arayacaktır.
I InternetCheckConnection() işlevi ek olarak, bir while(true){//the code in here } //check for inet connection , else will sleep for 10 mins and check again
ile kullanılan Win32 API işlevi vardır (InternetGetConnectedState()) (kullanılabilirliği) bir tür için doğru/doğru bir döner internet bağlantısı: Aynı zamanda anlatır
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384702(v=vs.85).aspx
sen (LAN, modem, proxy vs.) sahip internete ne tür bir bağlantı - genellikle bilmek çok kullanışlı olabilir.
Windows 7'de zaten bunu yapan bir hizmet var. Ağın internet bağlantısına sahip olduğunu bildirmek için görev çubuğu simgesi nasıl çalışır. –
@EricUrban Windows, bunu bir DNS aramasının birleşimiyle yapmanın yanı sıra belirli bir IP'den bir belge talep etmek gibi görünüyor. Bkz. [Windows 7 Ağ Farkındalığı] (http://blog.superuser.com/2011/05/16/windows-7-network-awareness/). –
@WesleyBaugh Bu doğru. –