আমি কীভাবে একটি নেটওয়ার্ক সংযোগ পরীক্ষা করতে পারি?


111

কোনও নেটওয়ার্ক সংযোগ উপলব্ধ আছে কিনা তা নির্ধারণ করার সর্বোত্তম উপায় কী?


উত্তর:


153

আপনি .NET 2.0 এ নেটওয়ার্ক সংযোগের জন্য এটি ব্যবহার করে পরীক্ষা করতে পারেন GetIsNetworkAvailable():

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

আইপি ঠিকানার পরিবর্তন বা নেটওয়ার্কের প্রাপ্যতার পরিবর্তনগুলি নিরীক্ষণ করতে নেটওয়ার্কচেনিজ শ্রেণীর ইভেন্টগুলি ব্যবহার করুন :

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

9
এটি কি "সীমিত প্রাপ্যতা" র যত্ন করে?
tofutim

এটি সর্বদা ডাব্লুপিএফ-তে কাজ করে না। কিছু ল্যাপটপগুলি মিথ্যা প্রত্যাবর্তন করে এবং কিছু সত্য করে দেয়
ক্রিলোভিচ

আসলেই কি এই কাজ? আমি কেবল এই লাইনটি লিখেছি এবং আমার রাউটারটি বন্ধ করেছি এবং এখনও সত্য প্রত্যাবর্তন করছি!
মুশফিক

1
NetworkInterface.GetIsNetworkAvailable()বিশেষত ভার্চুয়াল মেশিনে চলার সময় আমার অ্যাপ্লিকেশনটিতে (.NET 4.5, উইন্ডোজ 10) খুব বিশ্বাসযোগ্য নয়। ইভেন্টগুলি পরিচালনা NetworkAvailabilityChangedকরা নির্ভরযোগ্য।
eskimwier

এটি নির্ভরযোগ্য নয়। পড়া 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
এটি সঠিক এবং অনেকগুলি উপস্থাপণের দাবিদার - আমি পেয়েছি যে গৃহীত উত্তরে উল্লিখিত নেটওয়ার্কএভলিউশনচেন্জড ইভেন্টটি নির্ভরযোগ্যভাবে বরখাস্ত করা হয়নি, যা সম্ভবত উত্তরটিতে উল্লিখিত হিসাবে ভার্চুয়াল অ্যাডাপ্টারগুলির দ্বারা ঘটেছে
মেরেক

1
ভার্চুয়াল মেশিনগুলির জন্য অতিরিক্ত চেকের জন্য +1। শুধু গতকাল এই ক্ষেত্রে চালানো। তবে আমি এখনও মনে করি এটি 'হাইপ-ভি' পরিচালনা করে না, কারণ তাদের নামে 'ভার্চুয়াল' নেই।
হার্ডো

3
@ হারডো - হ্যাঁ, কোডটি নিখুঁত নয় এবং আমি মনে করি না যে ভার্চুয়াল বিশ্বে নিখুঁত কোনও কিছুই থাকতে পারে। তবে আপনি এটি উন্নতি করতে পারেন।
সাইমন মাউরিয়ার

@ সিমোনমুরিয়ার আপনি ঠিক বলেছেন কেবলমাত্র এটি লক্ষ করতে চেয়েছিলেন, যদি এখনও কেউ সত্য হয়ে যায়, যদি কোনও সংযোগ না থাকে -> এটি কোনও সমস্যা হতে পারে :)
হার্ডো

1
@ নেলিকাস - আমি এখনও অবধি যে প্রকল্পগুলিতে কাজ করছি, আমি একটি পর্যায়ক্রমিক পর্যবেক্ষণ / পোলিং সিস্টেম প্রয়োগ করেছি (সরল এইচটিটিপি জিইটি অনুরোধ কারণ আমি একটি ওয়েব সার্ভারকে লক্ষ্য করেছিলাম) যা সার্ভারকে "ডাউন" হিসাবে সনাক্ত করা হলে ঘটনাগুলি উত্থাপন করে (পৌঁছনীয় নয়) HTTP দ্বারা) বা "আপ" (আবার পৌঁছনীয়)। সাধারণ ক্ষেত্রে, আপনি আপনার ক্ষেত্রে "নির্ভরযোগ্য" এর অর্থ কী তা সংজ্ঞায়িত করতে পারেন এবং অনুরূপ যুক্তি প্রয়োগ করতে পারেন।
সাইমন মউরিয়ার

9

মাইক্রোসফ্ট উইন্ডো ভিস্তা এবং 7 এনসিএসআই (নেটওয়ার্ক কানেকটিভিটি স্ট্যাটাস ইনডিকেটর) প্রযুক্তি ব্যবহার করে:

  1. এনসিএসআই www.msftncsi.com এ একটি ডিএনএস সন্ধান করে, তারপরে http://www.msftncsi.com/ncsi.txt অনুরোধ করে । এই ফাইলটি একটি সরল-পাঠ্য ফাইল এবং এতে কেবল ' মাইক্রোসফ্ট এনসিএসআই ' লেখা রয়েছে ।
  2. এনসিএসআই dns.msftncsi.com এর জন্য একটি ডিএনএস অনুসন্ধান অনুরোধ প্রেরণ করে। এই ডিএনএস ঠিকানাটি 131.107.255.255 এ সমাধান করা উচিত। যদি ঠিকানাটি মেলে না, তবে ধরে নেওয়া হবে যে ইন্টারনেট সংযোগটি সঠিকভাবে কাজ করছে না।

3
এটি দুর্দান্ত, তবে প্রযুক্তিগতভাবে কোনও 'নেটওয়ার্ক' এর সহজলভ্যতা সম্পর্কে নয় তবে আরও 'কি আমার কাছে HTTP এর মাধ্যমে ইন্টারনেট সংযোগ রয়েছে?' আপনার নিখুঁত নেটওয়ার্ক সংযোগ থাকতে পারে তবে ইন্টারনেটের সাথে কোনও সংযোগ নেই, উদাহরণস্বরূপ স্ট্যান্ড-একা ল্যানে। আরও তথ্যের জন্য ওএম
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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.