नेटवर्क कनेक्शन के लिए मैं कैसे जांच करूं?


111

यदि नेटवर्क कनेक्शन उपलब्ध है, तो यह निर्धारित करने का सबसे अच्छा तरीका क्या है?


जवाबों:


153

आप .NET 2.0 में नेटवर्क कनेक्शन के लिए जाँच कर सकते हैं GetIsNetworkAvailable():

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

IP पते में परिवर्तन या नेटवर्क उपलब्धता में परिवर्तन की निगरानी के लिए NetworkChange वर्ग की घटनाओं का उपयोग करें :

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

9
क्या यह "सीमित उपलब्धता" का ख्याल रखता है?
टॉफुटिम

यह हमेशा WPF में काम नहीं करता है। कुछ लैपटॉप झूठे और कुछ सच लौटे
krilovich

क्या यह वास्तव में काम है? मैंने सिर्फ यह पंक्ति लिखी है और अपने राउटर को बंद कर दिया है और अभी भी सही है!
मुश्फिक

1
NetworkInterface.GetIsNetworkAvailable()मेरे आवेदन में बहुत अविश्वसनीय है (.NET 4.5, विंडोज 10), खासकर जब एक आभासी मशीन में चल रहा हो। से घटनाओं को संभालना NetworkAvailabilityChangedविश्वसनीय रहा है।
बजे

यह विश्वसनीय नहीं है। read stackoverflow.com/a/25779403/2377343
T.Todua

174

चिह्नित उत्तर 100% ठीक है, हालांकि, कुछ मामले हैं जब मानक विधि को वर्चुअल कार्ड (वर्चुअल बॉक्स, ...) द्वारा मूर्ख बनाया जाता है। यह अक्सर अपनी गति (सीरियल पोर्ट, मोडेम, ...) के आधार पर कुछ नेटवर्क इंटरफेस को छोड़ने के लिए भी वांछनीय है।

यहाँ एक कोड है जो इन मामलों की जाँच करता है:

    /// <summary>
    /// Indicates whether any network connection is available
    /// Filter connections below a specified speed, as well as virtual network cards.
    /// </summary>
    /// <returns>
    ///     <c>true</c> if a network connection is available; otherwise, <c>false</c>.
    /// </returns>
    public static bool IsNetworkAvailable()
    {
        return IsNetworkAvailable(0);
    }

    /// <summary>
    /// Indicates whether any network connection is available.
    /// Filter connections below a specified speed, as well as virtual network cards.
    /// </summary>
    /// <param name="minimumSpeed">The minimum speed required. Passing 0 will not filter connection using speed.</param>
    /// <returns>
    ///     <c>true</c> if a network connection is available; otherwise, <c>false</c>.
    /// </returns>
    public static bool IsNetworkAvailable(long minimumSpeed)
    {
        if (!NetworkInterface.GetIsNetworkAvailable())
            return false;

        foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
        {
            // discard because of standard reasons
            if ((ni.OperationalStatus != OperationalStatus.Up) ||
                (ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
                (ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))
                continue;

            // this allow to filter modems, serial, etc.
            // I use 10000000 as a minimum speed for most cases
            if (ni.Speed < minimumSpeed)
                continue;

            // discard virtual cards (virtual box, virtual pc, etc.)
            if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) ||
                (ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0))
                continue;

            // discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card.
            if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
                continue;

            return true;
        }
        return false;
    }

17
यह सही है और कई उतार-चढ़ावों का हकदार है - मैंने पाया कि स्वीकृत उत्तर में उल्लिखित NetworkAvucationChanged घटना को विश्वसनीय रूप से निकाल नहीं दिया गया है, जो संभवतः इस उत्तर में उल्लिखित आभासी एडेप्टर के कारण होता है
Marek

1
वर्चुअल मशीनों के लिए अतिरिक्त जांच के लिए +1। कल ही इस मामले में चला। लेकिन मुझे अभी भी लगता है कि यह 'हाइप-वी' को हैंडल नहीं करता है, क्योंकि उनके नाम में 'वर्चुअल' नहीं है।
हरदो

3
@ हेरो - हाँ, कोड सही नहीं है, और मुझे नहीं लगता कि आभासी दुनिया में कुछ भी सही हो सकता है। लेकिन आप इसे सुधार सकते हैं।
साइमन मूरियर

@SimonMourier आप सही हैं। बस यह नोट करना चाहता था, अगर कोई भी अभी भी सच हो जाता है, अगर कोई संबंध नहीं है -> यह एक मुद्दा हो सकता है :)
हरदो

1
@noelicus - जिन परियोजनाओं पर मैं अब तक काम कर रहा हूं, मैंने समय-समय पर निगरानी / मतदान प्रणाली (सरल HTTP जीईटी अनुरोधों को लागू किया है क्योंकि मैं एक वेब सर्वर को लक्षित कर रहा था) जो उस घटना को उठाता है जब सर्वर को "डाउन" के रूप में पाया जाता है (उपलब्ध नहीं है) HTTP द्वारा) या "अप" (फिर से प्राप्य)। सामान्य मामले में, आप परिभाषित कर सकते हैं कि आपके मामले में "विश्वसनीय" का क्या मतलब है, और एक समान तर्क को लागू करें।
साइमन मूरियर

9

Microsoft विंडोज़ विस्टा और 7 उपयोग NCSI (नेटवर्क कनेक्टिविटी स्थिति संकेतक) टेक्निक:

  1. NCSI www.msftncsi.com पर DNS लुकअप करता है, फिर http://www.msftncsi.com/ncsi.txt का अनुरोध करता है । यह फ़ाइल एक सादा-पाठ फ़ाइल है और इसमें केवल ' Microsoft NCSI ' पाठ है ।
  2. NCSI dns.msftncsi.com के लिए DNS लुकअप अनुरोध भेजता है। यह DNS पता 131.107.255.255 पर हल होना चाहिए। यदि पता मेल नहीं खाता है, तो यह माना जाता है कि इंटरनेट कनेक्शन सही ढंग से काम नहीं कर रहा है।

3
यह बहुत अच्छा है, लेकिन तकनीकी रूप से एक 'नेटवर्क' की उपलब्धता के बारे में नहीं है, लेकिन अधिक 'क्या मुझे HTTP के माध्यम से इंटरनेट कनेक्टिविटी है?' उदाहरण के लिए, स्टैंड-अलोन लैन पर आपके पास सही नेटवर्क कनेक्शन हो सकते हैं लेकिन इंटरनेट से कोई कनेक्टिविटी नहीं है। अधिक जानकारी के लिए देखें NCSI: Technet.microsoft.com/en-us/library/cc766017.aspx
MichielB

1

नेटवर्क कनेक्शन की जांच करने के लिए इस विधि को कॉल करें।

public static bool IsConnectedToInternet()
        {
            bool returnValue = false;
            try
            {

                int Desc;
                returnValue = Utility.InternetGetConnectedState(out Desc, 0);
            }
            catch
            {
                returnValue = false;
            }
            return returnValue;
        }

इसे कोड की नीचे पंक्ति में रखें।

[DllImport("wininet.dll")]
        public extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.