6
votes

Vérifiez constamment la connexion Internet

Comment puis-je vérifier constamment une connexion Internet constamment dans ma demande et réagir si la connexion n'est pas disponible?

J'utilise actuellement: P>

while(true) {
 if(HasConnection()) {
     //doSomething..
  }
   //stop app by 1sec
}


0 commentaires

11 Réponses :


0
votes

Comment saurez-vous si vous avez une connexion Internet? Est-ce suffisant que vous puissiez parcourir des paquets vers un routeur voisin? Peut-être que la machine n'a qu'une seule carte réseau, une seule passerelle, et peut-être que la connexion de la passerelle tombe, mais la machine peut toujours se diriger vers la passerelle et le réseau local?

Peut-être que la machine a une seule carte réseau et une douzaine de passerelles; Peut-être qu'ils viennent aller tout le temps, mais un d'entre eux est toujours up?

Et si la machine a plusieurs NICS, mais seule une seule passerelle? Peut-être peut-être que vous pouvez suivre un sous-ensemble d'Internet, mais a toujours une excellente connexion à un réseau local non connecté à Internet?

Et si la machine a des nics mulipades, plusieurs passerelles, mais pour des raisons de politique administrative, il ne reste que des portions d'Internet?

Ne vous inquiétez-vous vraiment que si les clients ont une connectivité vos serveurs ?

Quel type de latence entre les paquets est acceptable? (30ms est bon, 300ms poussent les limites de l'endurance humaine, 3000ms est intolérable longtemps, 960000ms est ce qui serait nécessaire pour une connexion à une sonde solaire.) Quel type de perte de paquets est acceptable?

Qu'est-ce que vous vraiment essayer de mesurer?


0 commentaires

0
votes

Ce serait un début mais Comme Sarnold a mentionné, il y a beaucoup de choses que vous devez considérer


0 commentaires


3
votes

La réponse acceptée à Cette question sur superutilisateur décrit la manière dont les fenêtres détergent si elle a accès au réseau. Vous pouvez utiliser une méthode similaire, mais j'apprendrais un fil séparé lorsque votre application commence à faire le chèque. Demandez aux threads séparés effectuer la vérification de la manière que vous ressentez est la meilleure et soulevez un événement si l'état de la connexion change.



0
votes

Vous pouvez tester la connectivité Internet en pinging sur un site Web comme: xxx


0 commentaires

1
votes

Si vous n'avez besoin que de savoir si au moins une connexion est disponible, vous pouvez essayer ceci:

InternetgetConnectedstateex ()

http://msdn.microsoft. COM / EN-US / Bibliothèque / AA384705% 28V = vs.85% 29.aspx


0 commentaires

2
votes

Utilisez le code suivant:

public static class LocalSystemConnection
{
    [DllImport("wininet.dll", SetLastError=true, CallingConvention = CallingConvention.ThisCall)]
    extern static bool InternetGetConnectedState(out ConnectionStates lpdwFlags, long dwReserved);

    /// <summary>
    /// Retrieves the connected state of the local system.
    /// </summary>
    /// <param name="connectionStates">A <see cref="ConnectionStates"/> value that receives the connection description.</param>
    /// <returns>
    /// A return value of true indicates that either the modem connection is active, or a LAN connection is active and a proxy is properly configured for the LAN.
    /// A return value of false indicates that neither the modem nor the LAN is connected.
    /// If false is returned, the <see cref="ConnectionStates.Configured"/> flag may be set to indicate that autodial is configured to "always dial" but is not currently active.
    /// If autodial is not configured, the function returns false.
    /// </returns>
    public static bool IsConnectedToInternet(out ConnectionStates connectionStates)
    {
        connectionStates = ConnectionStates.Unknown;
        return InternetGetConnectedState(out connectionStates, 0);
    }

    /// <summary>
    /// Retrieves the connected state of the local system.
    /// </summary>
    /// <returns>
    /// A return value of true indicates that either the modem connection is active, or a LAN connection is active and a proxy is properly configured for the LAN.
    /// A return value of false indicates that neither the modem nor the LAN is connected.
    /// If false is returned, the <see cref="ConnectionStates.Configured"/> flag may be set to indicate that autodial is configured to "always dial" but is not currently active.
    /// If autodial is not configured, the function returns false.
    /// </returns>
    public static bool IsConnectedToInternet()
    {
        ConnectionStates state = ConnectionStates.Unknown;
        return IsConnectedToInternet(out state);
    }
}

[Flags]
public enum ConnectionStates
{
    /// <summary>
    /// Unknown state.
    /// </summary>
    Unknown = 0,

    /// <summary>
    /// Local system uses a modem to connect to the Internet.
    /// </summary>
    Modem = 0x1,

    /// <summary>
    /// Local system uses a local area network to connect to the Internet.
    /// </summary>
    LAN = 0x2,

    /// <summary>
    /// Local system uses a proxy server to connect to the Internet.
    /// </summary>
    Proxy = 0x4,

    /// <summary>
    /// Local system has RAS (Remote Access Services) installed.
    /// </summary>
    RasInstalled = 0x10,

    /// <summary>
    /// Local system is in offline mode.
    /// </summary>
    Offline = 0x20,

    /// <summary>
    /// Local system has a valid connection to the Internet, but it might or might not be currently connected.
    /// </summary>
    Configured = 0x40,
}


0 commentaires

1
votes

Si vous souhaitez vérifier en continu, utilisez la minuterie xxx


0 commentaires

1
votes

Je sais que c'est une vieille question, mais cela fonctionne bien pour moi. XXX PRE>

Je m'abonne à l'événement à un auditeur et vérifie constamment la connexion. Ceci vous pouvez ajouter une instruction IF telle que: P>

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
   {
        //Send Ping...
   }
else
    {
        //other code....
    }


0 commentaires

0
votes

Ce code sauvera la sauvetage pour vous .. Il vérifie non seulement la vraie connexion Internet mais ne gérait également l'exception avec une indication sur la fenêtre de la console ... Après toutes les 2 secondes xxx


0 commentaires

0
votes

Utilisation du NetworkChange.NetworkAndiapaillabilitéChanged code> est la réponse la plus trompeuse. Il vérifie la modification de la disponibilité du réseau et non la modification de la connexion Internet.

Nous pouvons surveiller la connexion Internet à l'aide de Windows NLM API code>. P>

using System;
using System.Runtime.InteropServices.ComTypes;
using NETWORKLIST;

namespace Components.Network.Helpers
{
    public class InternetConnectionChecker : INetworkListManagerEvents, IDisposable
    {
        private int _cookie;
        private IConnectionPoint _connectionPoint;
        private readonly INetworkListManager _networkListManager;

        public InternetConnectionChecker()
        {
            _networkListManager = new NetworkListManager();
        }

        public bool IsConnected()
        {
            return _networkListManager.IsConnectedToInternet;
        }

        public void StartMonitoringConnection()
        {
            try
            {
                var container = _networkListManager as IConnectionPointContainer;
                if (container == null)
                    throw new Exception("connection container is null");
                var riid = typeof(INetworkListManagerEvents).GUID;
                container.FindConnectionPoint(ref riid, out _connectionPoint);
                _connectionPoint.Advise(this, out _cookie);
            }
            catch (Exception e)
            {

            }
        }

        public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
        {
            if (_networkListManager.IsConnectedToInternet)
            {
                // do something based on internet connectivity
            }

        }

        public void Dispose()
        {
            _connectionPoint.Unadvise(_cookie);
        }
    }
}


0 commentaires