सी # 2008 एसपी 1इंटरनेट कनेक्शन का परीक्षण करने का सबसे तेज़ तरीका
मैं इस क्लाइंट वेबसाइट से कनेक्ट करने के लिए इस कोड का उपयोग कर रहा हूं। यह एक सॉफ्टफोन एप्लिकेशन के लिए है। उपयोगकर्ता कॉल करने से पहले, सॉफ्टफ़ोन को परीक्षण करना पड़ता है कि कोई सक्रिय इंटरनेट कनेक्शन है या नहीं।
तो, मैं चाहता हूं कि मैंने अपनी क्लाइंट वेबसाइट से कनेक्ट करने के लिए httpWebRequest क्लास का उपयोग किया है। अगर प्रतिक्रिया ठीक है, तो इंटरनेट कनेक्शन आगे बढ़ सकता है।
हालांकि, मैंने देखा है कि प्रतिक्रिया का जवाब देने में बहुत लंबा समय लग रहा है। मुझे यकीन नहीं है कि यह परीक्षण करने का एक बहुत ही प्रभावी तरीका नहीं है।
हालांकि, जब मैं अपनी वेबसाइट पर ब्राउज़ करता हूं, तो पृष्ठ को लोड करने में एक सेकंड से भी कम समय लगता है। लेकिन बहुत समय लगता है जब मैं HttpWebRequest वर्ग का उपयोग
तो इस के लिए आवश्यकताएँ हैं:
कुछ समय एक प्रॉक्सी ग्राहक के कार्यालय में इस्तेमाल किया जाएगा। मैं टीसीपी क्लाइंट क्लास का उपयोग नहीं कर सकता (इसमें प्रॉक्सी प्रॉपर्टी नहीं है)।
प्रॉक्सी सॉक्स का समर्थन नहीं करता है इसलिए सॉकेट वर्ग का उपयोग नहीं कर सकता है।
मुझे टाइमआउट संपत्ति का उपयोग करने की आवश्यकता है। तो वेब क्लाइंट क्लास का उपयोग नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि जब तक प्रतिक्रिया वापस नहीं आती है तब तक सॉफ्टफ़ोन स्थिर हो जाता है। तो कुछ सेकंड के बाद टाइमआउट।
तो केवल एक ही जिसे मैं सोच सकता हूं वह है HttpWebRequest क्लास।
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
request.Timeout = 5000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("IsSIPServerAvailable: " + response.StatusCode);
isAvailable = true;
}
======== संपादित करें का उपयोग कर पी \ आह्वान ====
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState_e : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
// In function for checking internet
InternetConnectionState_e flags = 0;
bool isConnected = InternetGetConnectedState(ref flags, 0);
उस के साथ नकारात्मक (आईएमओ) यह है कि यह केवल आपको बताता है कि कंप्यूटर "सामान्य रूप से इंटरनेट" से जुड़ा हुआ है या नहीं। यह केवल कुछ हद तक संकेतक है कि आप उस विशेष सेवा को प्राप्त करने में सक्षम होंगे या नहीं। ऐसा करने का सबसे अच्छा तरीका, आईएमओ, उस सेवा से जुड़ना है। बेशक यह गारंटी नहीं देगा कि यह अभी भी एक सेकंड बाद वैध होगा, लेकिन मुझे लगता है कि यह संभव है तो यह एक बेहतर संकेतक है। (कुछ मामलों में यह नहीं है, उदाहरण के लिए यदि कनेक्टिंग सिर्फ कुछ प्रकार के चार्ज करता है।) –
मैंने पी/Invoke के लिए अपना कोड संपादित किया है। हालांकि, यह मुझे बताता है कि लैन मेरे कंप्यूटर से जुड़ा हुआ है (प्लग इन या आउट)। हालांकि, यह मुझे नहीं बता सकता कि मेरे पास एक सक्रिय इंटरनेट कनेक्शन है (इंटरनेट ब्राउज़ करें)। – ant2009
@robUK: मैंने इंटरनेट चेक कनेक्शन में कॉल शामिल करने के लिए अपना उत्तर संपादित किया। यह एक और पी/Invoke है जिसे आप कोशिश कर सकते हैं - यह आपको बताएगा कि वह विशिष्ट यूआरएल उपलब्ध है या नहीं, लेकिन मेरा मानना है कि यह एक कनेक्शन को हुक करने की कोशिश करने से थोड़ा तेज है। –