Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérifier connexion internet

5 réponses
Avatar
Sylvain MALLEVAL
Cela fait bien 6 mois que je cherche cela et je n'ai toujours pas trouver
comment faire :
Comment vérifier que la machine ou est exécutée une application est connecté
internet ??????

Merci pour votre aide

Sylvain

5 réponses

Avatar
VANNESTE Xavier
// Importing this file is needed since the method API call is being used.

[DllImport(@"C:WindowsSystem32wininet.dll")]

// This method will check the internet connection state

public static extern bool InternetGetConnectedState(ref uint connected, uint
reserved);

// Defined as INTERNET_CONNECTION_OFFLINE in WinInet.h

uint uConnection = 0x20;

// Check if there is a connection

if (InternetGetConnectedState(ref uConnection, 0) == true)
connecté a internet
else
non connecté a internet

"Sylvain MALLEVAL" <devbnet@[antispam]free.fr> a écrit dans le message de
news: %23$
Cela fait bien 6 mois que je cherche cela et je n'ai toujours pas trouver
comment faire :
Comment vérifier que la machine ou est exécutée une application est
connecté internet ??????

Merci pour votre aide

Sylvain



Avatar
Mehdi
On Thu, 7 Apr 2005 18:03:30 +0200, Sylvain MALLEVAL wrote:

Cela fait bien 6 mois que je cherche cela et je n'ai toujours pas trouver
comment faire :



J'espere que tu n'a pas fait que ca les 6 derniers mois quand meme... :-)

Comment vérifier que la machine ou est exécutée une application est connecté
internet ??????



Comme l'a dit Xavier, il y a moyen d'utiliser les API de wininet pour ca.
Le probleme, c'est que cela ne t'indique pas de maniere sure si le PC est
connecté a Internet ou non.

Si tu est connecté a un réseau local mais pas a Internet par exemple, il y
a des chances pour que InternetGetConnectedState retourne true. Un PC peut
egalement etre connecté a Internet mais derriere un proxy qui n'authorise
que certains protocoles ou restricte l'acces a certains serveurs
uniquement. Tu peut également etre derriere un firewall qui n'authorise les
connections que sur certains ports. Enfin, il se peut que le PC soit
connecté sans restriction a Internet mais que le serveur qui t'interesse
soit mort. Donc la seule maniere fiable et sure a 100% de tester la
connection a Internet est de tout betement tenter de se connecter au
serveur qui t'interesse et voir si il répond ou pas. Pour tester si un PC
peux acceder aux sites Web standards (HTTP, port 80), tu peux tenter de te
connecter a google.com par exemple:

try
{
WebRequest request = WebRequest.Create(new Uri("http://www.google.com"));
request.Timeout = 10000;

if (request.GetResponse().ContentLength > 0)
{
// Connecté
}
else
{
// Pas connecté
}
request.GetResponse().Close();
}
catch
{
// Pas connecté
}
Avatar
Sylvain MALLEVAL
Merci Mehdi, j'y avais pas pensé. Le problème, c'est que mon .contentlength
me renvoie tout le temps -1
et je ne comprend pas pourquoi
Merci
Sylvain

"Mehdi" a écrit dans le message de news:
1y28pd51j6akx.vpchor69om88$
On Thu, 7 Apr 2005 18:03:30 +0200, Sylvain MALLEVAL wrote:

Cela fait bien 6 mois que je cherche cela et je n'ai toujours pas trouver
comment faire :



J'espere que tu n'a pas fait que ca les 6 derniers mois quand meme... :-)

Comment vérifier que la machine ou est exécutée une application est
connecté
internet ??????



Comme l'a dit Xavier, il y a moyen d'utiliser les API de wininet pour ca.
Le probleme, c'est que cela ne t'indique pas de maniere sure si le PC est
connecté a Internet ou non.

Si tu est connecté a un réseau local mais pas a Internet par exemple, il y
a des chances pour que InternetGetConnectedState retourne true. Un PC peut
egalement etre connecté a Internet mais derriere un proxy qui n'authorise
que certains protocoles ou restricte l'acces a certains serveurs
uniquement. Tu peut également etre derriere un firewall qui n'authorise
les
connections que sur certains ports. Enfin, il se peut que le PC soit
connecté sans restriction a Internet mais que le serveur qui t'interesse
soit mort. Donc la seule maniere fiable et sure a 100% de tester la
connection a Internet est de tout betement tenter de se connecter au
serveur qui t'interesse et voir si il répond ou pas. Pour tester si un PC
peux acceder aux sites Web standards (HTTP, port 80), tu peux tenter de te
connecter a google.com par exemple:

try
{
WebRequest request = WebRequest.Create(new Uri("http://www.google.com"));
request.Timeout = 10000;

if (request.GetResponse().ContentLength > 0)
{
// Connecté
}
else
{
// Pas connecté
}
request.GetResponse().Close();
}
catch
{
// Pas connecté
}


Avatar
Patrick Philippot
Sylvain MALLEVAL wrote:
Cela fait bien 6 mois que je cherche cela et je n'ai toujours pas
trouver comment faire :
Comment vérifier que la machine ou est exécutée une application est
connecté internet ??????



Bonjour,

D'après mon expérience, les APIs WinInet ne fonctionnent pas toujours
très bien à ce propos. En particulier, GetConnectedState ne renvoie pas
la bonne information. Par ailleurs, toute méthode basée sur un test de
connection présente l'inconvénient majeur de provoquer l'ouverture de la
boîte de dialogue de connexion dial-up. Or en général, on veut tester la
présence d'une connexion de manière transparente, sans que l'utilisateur
soit sollicité.

J'utilise une méthode qui fonctionne bien mais malheureusement, je n'ai
pas eu le temps de traduire ce code en .Net mais ça ne devrait
pas prendre trop de temps. En voici le principe:

1/ On utilise l'API GetIpForwardTable pour récupérer la table de
forwarding IP.

2/ Pour chaque entrée de la table, on vérifie si le champ dwForwardDest
est égal à 0. Si une des entrées de la table a cette valeur à 0, c'est
qu'il existe une passerelle active, donc a priori une connexion
Internet.

Je suis vraiment trop chargé pour faire ça maintenant (désolé) mais si
quelqu'un a 5 minutes, voici le code de la routine en C++:

BOOL MaClasse::CheckConnection()
{
MIB_IPFORWARDTABLE* pft;
DWORD dwTableSize = 0;
BOOL bHasDefaultRoute = FALSE;

GetIpForwardTable(NULL, &dwTableSize, FALSE);
pft = (MIB_IPFORWARDTABLE*) new BYTE[dwTableSize];

if (GetIpForwardTable(pft, &dwTableSize, TRUE) == NO_ERROR)
{
for (unsigned int nIndex = 0; nIndex < pft->dwNumEntries; nIndex++)
{
if (pft->table[nIndex].dwForwardD­est == 0)
// Il y a une passerelle par défaut
{
bHasDefaultRoute = TRUE;
break;
}
}
}

delete pft;

return bHasDefaultRoute;
}

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Mehdi
On Fri, 8 Apr 2005 02:32:22 +0200, Sylvain MALLEVAL wrote:

Merci Mehdi, j'y avais pas pensé. Le problème, c'est que mon .contentlength
me renvoie tout le temps -1
et je ne comprend pas pourquoi



Il est possible qu'il y ai une erreur dans mon code. En fait c'est un bout
de code que j'avais utilisé il y a tres longtemps dans une petite appli et
j'avais utilisé le test suivant:

if (request.GetResponse().ToString().Length > 0)

Seulement en le relisant avant de te l'envoyer, j'ai trouvé bizarre
d'utiliser ToString vu qu'il y avait ContentLength donc j'ai remplacé.
C'est possible que ca ne marche pas. En fait, je n'ai jamais utilisé le
WebClient a part pour ca donc regarde la doc, je ne l'ai peut etre pas
utilisé comme il le fallait. Sinon la méthode de Patrick a l'air pas mal a
utiliser en complément avec cette méthode surtout pour ceux qui ont un bon
vieux modem dial-up.