2010-01-20 5 views
3

J'essaie d'obtenir des événements lorsque la connexion Internet est rétablie après sa perte. C'est pour un logiciel de transfert de données que je développe. Si je perds le réseau pendant le transfert de données, je voudrais être informé quand il est de retour et continuer le transfert automatiquement.Capture de l'événement de changement d'état du réseau

Je peux bien sûr créer un fil séparé et vérifier le réseau de temps en temps avec une minuterie, mais il y a peut-être une meilleure option là-bas.

Je développe principalement pour Windows, en C++ (pas .net).

Je peux également utiliser wxwidgets (je l'utilise pour l'interface graphique) mais je doute qu'il offre des fonctionnalités connexes.

Répondre

2

Vous pouvez consulter l'API http://msdn.microsoft.com/en-us/library/cc185680(VS.85).aspx

Notification Server événements système (SENS) Je n'ai pas vraiment utilisé, mais il semble que cela fournit les événements que vous recherchez.

EDIT:

WMI semble avoir toutes les informations dont vous avez besoin sur les différentes connectivité réseau et change d'état. Il a également un modèle d'événement asynchrone qui peut être utilisé pour obtenir des notifications. L'astuce est, je suppose, de générer la bonne requête WMI pour obtenir l'information que vous voulez. Ce blog ressemble au bon type de requête, et cela MSDN explique comment gérer les événements de manière asynchrone.

+0

On dirait que c'est seulement pour les plates-formes mobiles. Je dois regarder plus. – mentat

+0

Réponse éditée pour inclure une suggestion sur l'utilisation de WMI – Ruddy

+0

Connexe: http://stackoverflow.com/questions/1085045/check-whether-internet-connection-is-available-with-c – Ruddy

0

Je ne sais pas quel protocole utiliser et si vous pouvez contrôler la destination, mais dans ce cas, la destination peut interroger pour une nouvelle tentative. La destination sait mieux ce qu'elle a reçu, donc elle peut donner le nombre d'octets reçus comme offset pour la retransmission.

+0

Merci mais je suis en mesure de continuer le transfert de l'endroit où il a été laissé avec succès. Mais je voudrais le faire dès que le réseau/internet est disponible. Donc, je devrais détecter la disponibilité du réseau d'une manière basée sur l'événement. – mentat

0

Ce lien MSDN fournit un exemple très détaillé de la capture d'événements sur WMI avec COM. L'exemple ne capture pas réellement les événements de réseau - mais je crois que si vous branchez la bonne requête dedans, cela fonctionnerait.

(beaucoup de code ici, donc je ne suis pas le copier dans la réponse) http://msdn.microsoft.com/en-us/library/aa390425%28v=vs.85%29.aspx

+0

Et - avec cet outil intégré, vous pouvez effectuer des requêtes WMI sans avoir à exécuter le code autour d'eux: (exécuté à partir de la ligne de commande) wbemtest.exe – FuzzyAmi