2008-10-11 5 views
13

यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि WinForms ऐप के लिए कोई इंटरनेट कनेक्शन उपलब्ध है या नहीं। (निश्चित रूप से प्रोग्रामिंग) यदि उपयोगकर्ता इंटरनेट से कनेक्ट नहीं है तो मैं कुछ फ़ंक्शंस को अक्षम/छिपाना चाहता हूं।आप कैसे निर्धारित करते हैं कि आपके WinForms ऐप के लिए कोई इंटरनेट कनेक्शन उपलब्ध है या नहीं?

उत्तर

15

यदि आप एक नेटवर्क से जुड़े हैं लेकिन, इसका यह अर्थ नहीं है कि आप इंटरनेट से कनेक्ट कर रहे हैं निम्नलिखित का निर्धारण करेगा:

NetworkInterface.GetIsNetworkAvailable() 

यहाँ कि लगता है स्टीव कोड का एक सी # अनुवाद है बहुत अच्छा हो:

private static int ERROR_SUCCESS = 0; 
public static bool IsInternetConnected() { 
    long dwConnectionFlags = 0; 
    if (!InternetGetConnectedState(dwConnectionFlags, 0)) 
     return false; 

    if(InternetAttemptConnect(0) != ERROR_SUCCESS) 
     return false; 

    return true; 
} 


[DllImport("wininet.dll", SetLastError=true)] 
public static extern int InternetAttemptConnect(uint res); 


[DllImport("wininet.dll", SetLastError=true)] 
public static extern bool InternetGetConnectedState(long flags,long reserved); 
+0

सी # :) – QAZ

+0

पर मेरा जवाब पोर्ट करने के लिए धन्यवाद InternetGetConnectedState के आपके अनुवाद में एक बग है। अनुवाद के लिए नीचे देखें – JaredPar

9

मैं एसी # डेवलपर नहीं कर रहा हूँ लेकिन C++ आप Win32 एपीआई (विशेष रूप से Wininet.dll से) का उपयोग कर सकते इस तरह:

bool IsInternetConnected(void) 
{ 
    DWORD dwConnectionFlags = 0; 

    if(!InternetGetConnectedState(&dwConnectionFlags, 0)) 
     return false; 

    if(InternetAttemptConnect(0) != ERROR_SUCCESS) 
     return false; 

    return true; 
} 

मैं इस मान तुच्छता C#

1

एक में बदल गया है इंटरनेट कनेक्टिविटी पर अनुमान NetworkInterface.GetIsNetworkAvailable() पर नेटवर्क उपलब्धता होगी। NetworkChange पर होने वाली घटनाएं आपको बताती हैं कि यह कब बदलती है। दोनों कक्षा System.Net.NetworkInformation नामस्थान में हैं।

बेशक, आपको यह नहीं पता होगा कि इंटरनेट वास्तव में तब तक उपलब्ध है जब तक कि आप किसी चीज़ से कनेक्ट करने का प्रयास नहीं करते।

2

मुझे यह कोड कहीं और मिला, लेकिन वास्तव में यह जानना है कि कोई बेहतर तरीका है या नहीं।

HttpWebRequest req; 
HttpWebResponse resp; 
try 
{ 
    req = (HttpWebRequest)WebRequest.Create("http://www.google.com"); 
    resp = (HttpWebResponse)req.GetResponse(); 

    if(resp.StatusCode.ToString().Equals("OK")) 
    { 
     Console.WriteLine("its connected."); 
    } 
    else 
    { 
     Console.WriteLine("its not connected."); 
    } 
} 
catch(Exception exc) 
{ 
    Console.WriteLine("its not connected."); 
} 

मुझे नेटवर्क इंटरफेस द्वारा डाले गए नेटवर्क चेंज ईवेंट के माध्यम से कनेक्शन खो जाने पर निगरानी करने में सक्षम होने का विचार पसंद है। मेरा ऐप अनुभवहीन उपयोगकर्ताओं द्वारा नोटबुक पर उपयोग के लिए है, जहां इंटरनेट कनेक्टिविटी अनिश्चित है (अक्सर ऑस्ट्रेलियाई आउटबैक में)।

0

http://www.csharphelp.com/archives3/archive499.html

इसके अलावा, अतीत में विशेषज्ञ-विनिमय लिंक स्क्रॉल: http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=13045, और आप कुछ सुझाव दिखाई देंगे।

इसके अलावा, यदि आप वीबीनेट (जिसे आप लिंक कर सकते हैं, बीटीडब्ल्यू) से माई नेमस्पेस के लिए गेम हैं, तो My.Computer.Network.Is उपलब्ध सबसे सरल समाधान है।

10

sbeskur की प्रतिक्रिया InternetGetConnectedState के अनुवाद में एक बग है। पैरामीटर दोनों DWORD हैं (पहला एक LPDWORD है)। इन दोनों का अनुवाद सी # में int है (तकनीकी रूप से, uint लेकिन int अधिकांश परिदृश्यों के लिए काम करेगा)।

नीचे सही अनुवाद।


[DllImport("wininet.dll", SetLastError=true)] 
public static extern bool InternetGetConnectedState(out int flags,int reserved); 
+0

अच्छा काम, मेरा परिवर्तन इस बदलाव के बिना काम नहीं करेगा। –

1

InternetGetConnected राज्य यह स्थापित करने में चरण एक है कि आप किसी नेटवर्क से जुड़े हुए हैं। यह निर्धारित करने के लिए कि क्या आपके पास इंटरनेट कनेक्शन है, एक तकनीक इंटरनेट पर कुछ सर्वर के लिए IPHelper api to send an ARP (पता समाधान प्रोटोकॉल) अनुरोध का उपयोग करना है।

+0

इस तथ्य के अलावा कि हर कोई ईथरनेट नेटवर्क से कनेक्ट नहीं है, आप अपने स्वयं के प्रसारण डोमेन के बाहर एआरपी अनुरोध नहीं भेज सकते हैं। सबसे अच्छे मामले में आपके पास एक एज गेटवे आपके अनुरोध के जवाब में अपने मैक पते के साथ जवाब देगा, जो आपको कुछ भी हासिल नहीं करता है। –

+0

अगर मैं गलत हूं, तो मुझे सही करें, लेकिन अगर मैं पिंगिंग पर निर्भर करता हूं तो मैं जोखिम चलाता हूं कि फ़ायरवॉल या सर्वर जो मैं पिंग कर रहा हूं वह पिंग्स फ़िल्टर करेगा। दूसरी तरफ अगर मैं arp_request (google.com) और मुझे एक वैध प्रतिक्रिया मिलती है तो मुझे पता है कि मैं नेट पर बाहर निकल सकता हूं। इस उद्देश्य के लिए हम सब चाहते हैं। –

1

पिंग google.com (या जाने-माने मेजबानों की एक सूची) या वास्तव में कार्यों में से एक (संरचनात्मक अर्थ में) करने का प्रयास करें जिसके लिए आपके एप्लिकेशन को इंटरनेट कनेक्टिविटी की आवश्यकता है। किसी भी ऑपरेटिंग सिस्टम पर, वास्तव में यह निर्धारित करने के लिए कोई तरीका नहीं है कि इंटरनेट कनेक्टिविटी वास्तव में को संवाद करने के लिए कार्यान्वित करने के लिए कार्यात्मक है या नहीं, "उपलब्ध" के बारे में ऑपरेटिंग सिस्टम के दृष्टिकोण के विपरीत।

संबंधित मुद्दे

 संबंधित मुद्दे