الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

InternetConnection

بدأه TarekNajem04 في 3 ديسمبر 2005 · 1 رد · 1,003 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سوف نتحدث عن كيف معرف الحالة لنت

يمد النظام وضائف كثير لذلك ولكن نختار أسهل هذه الوضائف وهي InternetGetConnectedStateEx

لكتابة هذه الوظيف في ال #C :

        [DllImport("WinInet.dll", CharSet = CharSet.Auto)]
        public static extern bool InternetGetConnectedStateEx(
            ref int lpdwFlags,
            [MarshalAs(UnmanagedType.LPTStr)]
 	 System.Text.StringBuilder lpszConnectionName,
            int dwNameLen,
            int dwReserved
            );

البرمتير الأول lpdwFlags: وهو عبارة عن مؤشر تعيد الوضيفة به حالة النت وهو عبارة عن مجموعة من الثوابت نستطيع أن نجمعهم في Enum وهم:

        [Flags]
        public enum InternetConnectedState
        {
            /// <summary>
            /// Local system has a valid connection to the Internet, but it might or might not be currently connected. 
            /// </summary>
            INTERNET_CONNECTION_CONFIGURED = 0x40,
            /// <summary>
            /// Local system uses a local area network to connect to the Internet. 
            /// </summary>
            INTERNET_CONNECTION_LAN = 0x02,
            /// <summary>
            /// Local system uses a modem to connect to the Internet. 
            /// </summary>
            INTERNET_CONNECTION_MODEM = 0x01,
            /// <summary>
            /// No longer used.
            /// </summary>
            INTERNET_CONNECTION_MODEM_BUSY = 0x08,
            /// <summary>
            ///  Local system is in offline mode. 
            /// </summary>
            INTERNET_CONNECTION_OFFLINE = 0x20,
            /// <summary>
            /// Local system uses a proxy server to connect to the Internet. 
            /// </summary>
            INTERNET_CONNECTION_PROXY = 0x04,
            /// <summary>
            /// Local system has RAS installed 
            /// </summary>
            INTERNET_RAS_INSTALLED = 0x10,
        }

نزود الـ Enum بـ FlagsAttribute لنعلم الـ #C بأنه يمكنن أن نجمع أكثر من ثابت يمكن أن تكون حالة النت Lan و Proxy

البرمتير الثاني lpszConnectionName: وهو عبارة عن مؤشر لنص لتعيد الوظيفة اسم Connection وبما أننا نتعامل مع كود Unmanaged نخبر الـ #C بأن يتعامل معه كـ مؤشر لـ LPTStr وهذا النوع مبرمجين الـ ++C يعرفةنه جيداً أي أنه مؤشر لنص من النوع Unicode

البرمتير الثالث dwNameLen: وهو طول النص مقدر بالبيت

البرمتير الرابع dwReserved: محجوز غير قابل للإستخدام

ولنقوم بستخدام هذه الوضيفة نستطيع أن نكتب ما يلي :

private void button1_Click(object sender, EventArgs e)
        {
            int Flag = 0;
            StringBuilder ConnectionName = new StringBuilder(255);

            WinInetrnetNativeAPI.InternetGetConnectedStateEx(ref Flag, ConnectionName, 255, 0);
            Connection_Name = ConnectionName.ToString();
            InternetConnectedState State = (InternetConnectedState)Flag;

            bool ConnectedViaLan = (State & InternetConnectedState.INTERNET_CONNECTION_LAN) == InternetConnectedState.INTERNET_CONNECTION_LAN;
            bool ConnectedViaModem = (State & InternetConnectedState.INTERNET_CONNECTION_MODEM) == InternetConnectedState.INTERNET_CONNECTION_MODEM;
            bool ConnectedViaProxy = (State & InternetConnectedState.INTERNET_CONNECTION_PROXY) == InternetConnectedState.INTERNET_CONNECTION_PROXY;
            
            bool IsConnected = false;
            if (ConnectedViaLan == true || ConnectedViaModem== true)
            {
                IsConnected = true;
            }

            MessageBox.Show(String.Format("Connection Name: {0}\n Connection State: {1}\n Via Lan: {2}\n Via Modem: {3}\n Via Proxy: {4}\n Is Connected: {5}", 
                ConnectionName, 
                State, 
                ConnectedViaLan,
                ConnectedViaModem,
                ConnectedViaProxy,
                IsConnected));
}

أو نستطيع أن نضع الكود في مؤقت ونختبر ما نريد

للإستزادة أضغط على الربط

msdn.microsoft.com

مع المرفقات مثال كامل وبداخلة Class مفيد جداً نستطيع أن نستخدمه في برامجنا

لأي سوأل أن في الخدمة

InternetConnection.rar

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#2

شكرا اخي على الموضوع بس عندي سؤال ممكن نقول اله علاقة بالموضوع من بعيد

الكود المكتوب بعطيك حالة النت سؤال باللوكل او على الانترنت

و بعتمد على ملفات dll

طيب لو كنت حابب اعرف حالة كرد الشبكة .. ما بعرف اذا سمعت عنها من قبل او لا ..

بس المعروف انه كرد الشبكة بكون اله اكتر من وضع منها

1- النورمل و هذه الحالة الطبيعة يعني كرد الشبكة راح يطبق نظام الفلترة و يستقبل الملفات الخاصة فيه (خاصة فيه من ناحية الايبي و الماك ادريس ) و الباقي يرفضها

2- في حالة تانية اسمها بروميسكوس مود و بهذه الحالة بلغي شغل الفلاتر .. بحيث انه يستقبل اي باكيت تصل للجهاز حتى لو الايبي ادريس او الماك اديس مش مطابق اله ... باللينكس حلها بسط و من اوامر اللينكس بتقدر تحلها .. بس بالوندوس لانه كلوس سورس فما لقيت الطريقة للحين .. اذا عندك خلفية عن الموضوع يا ريت تساعدني

و شكرا