سؤال

ويا هناك، وأنا أحاول لاستخدام منفذ فحص برنامج مكتوب في Visual Studio 2008 باستخدام .NET Framework 3.5 SP 1، ويبدو لي أن لديك مشكلة باستخدام برنامجي على لOS فيستا القائمة (في هذه الحالة OS الفعلي هو ويندوز سيرفر 2008 (الجهازين 32 و 64 بت))، في حين أنه لا ولكن تعمل بشكل جيد على الأجهزة XP. أنا لست متأكدا تماما ما هي المشكلة، ولكن يمكنني الحصول على System.NotSupportedException. أي أفكار عن كيف يمكن تغيير التعليمات البرمجية التالية (أو يفضل تكوين الجهاز) للسماح لهذا النوع من التحقق من الميناء؟

    static bool IsPortOpen(int portNumber)
    {
        bool isOpen = false;
        IPAddress ip = (IPAddress)Dns.GetHostAddresses("localhost")[0];
        Socket s = null;

        try
        {
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
                 ProtocolType.Tcp))

            s.Connect(ip, portNumber);

            // Port is in use and connection is successful
            if (s.Connected == true)
            {
                isOpen = false;
            }
        }
        catch (SocketException exception)
        {
            // http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx
            if (exception.ErrorCode == 10061)
            {
                isOpen = true;
            }
        }
        finally
        {
            if (s != null)
            {
                s.Close();
            }
        }

        return isOpen;
    }
هل كانت مفيدة؟

المحلول

وتبين ان المشكلة:

وDns.GetHostAddresses ( "مضيف")؛

وإرجاع 2 عناوين IP على ويندوز سيرفر 2008. الأول هو ":: 1"، والثاني هو IP الفعلي. إذا كان أي شخص يعرف لماذا هذا هو (منذ أن كنت لا يمكن أن يكون له معنى من العودة ":: 1") فما استقاموا لكم فاستقيموا نقدر عليه، وإلا، مجرد الاستيلاء يبدو IP الأخير من القائمة للعمل.

نصائح أخرى

و:: 1 هو عنوان الاسترجاع الإصدار IPv6. فشل التعليمات البرمجية الخاصة بك لأنك تستخدم AddressFamily.InterNetwork بدلا من AddressFamily.InternetWorkV6.

ويندوز فيستا + ديه الإصدار IPv6 تشغيل بشكل افتراضي. انها خيار التكوين منفصل لXP / 2003.

وأعتقد أن هناك اثنين من عناوين IP عاد على نظام التشغيل Windows 2008 Server لأنه واحد هو IPv4 و الآخر هو عنوان IPv6.

وقال "عندما يتم تمرير سلسلة فارغة كاسم المضيف، هذا الأسلوب بإرجاع عناوين IPv4 من المضيف المحلي لكافة أنظمة التشغيل باستثناء ويندوز سيرفر 2003؛ ل Windows Server 2003، كل من IPv4 و IPv6 عناوين ليتم إرجاع المضيف المحلي ". SRC: http://msdn.microsoft.com/ أون لنا / مكتبة / system.net.dns.gethostaddresses.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top