Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी में सॉकेट त्रुटियों का पता लगाना:एक व्यावहारिक मार्गदर्शिका

<पी> सी में सॉकेट त्रुटियों का पता लगाना:एक व्यावहारिक मार्गदर्शिका

<पी> नेटवर्क संचार में सॉकेट त्रुटियाँ एक बहुत ही सामान्य घटना है और यह कनेक्शन स्थापना, डेटा ट्रांसमिशन और डिस्कनेक्शन सहित प्रक्रिया के कई चरणों में बढ़ सकती है। ये त्रुटियाँ नेटवर्क विफलताओं, कनेक्शन टाइमआउट, संसाधन सीमाओं या गलत कॉन्फ़िगरेशन सेटिंग्स जैसे कई कारकों के कारण हो सकती हैं।

<पी> आइए "पेरर()" और "स्ट्रेरर()" फ़ंक्शंस का उपयोग करके सी प्रोग्रामिंग भाषा में सॉकेट त्रुटियों को पकड़ने के दो अलग-अलग तरीकों के बारे में चर्चा करें।

सॉकेट त्रुटियाँ क्या हैं?

<पी> सी भाषा में सॉकेट त्रुटियों को मुख्य रूप से नकारात्मक रिटर्न मान या विशिष्ट त्रुटि कोड द्वारा पहचाना जाता है जो सॉकेट फ़ंक्शन द्वारा लौटाए जाते हैं। ये त्रुटि कोड त्रुटि की प्रकृति के बारे में बहुमूल्य जानकारी प्रदान करते हैं और समस्याओं का पता लगाने के साथ-साथ उन्हें हल करने में भी हमारी मदद करते हैं। यदि सॉकेट फ़ंक्शन नकारात्मक मान लौटाता है, तो इसका मतलब है कि निष्पादन के समय कुछ त्रुटि आई है। उदाहरण के लिए, यदि "सॉकेट ()" फ़ंक्शन सॉकेट बनाने में विफल रहता है, तो यह विफलता को इंगित करने के लिए एक नकारात्मक मान लौटा सकता है। इसकी जांच करके हम ऐसी त्रुटियों का आसानी से पता लगा सकते हैं और उन पर प्रतिक्रिया दे सकते हैं।

<पी> नकारात्मक रिटर्न मानों के अलावा, सॉकेट फ़ंक्शंस "errno" वेरिएबल भी सेट करते हैं जो एक वैश्विक वैरिएबल है जो विशिष्ट त्रुटि कोड को संग्रहीत करता है जो सबसे हालिया सिस्टम या लाइब्रेरी फ़ंक्शन कॉल से जुड़ा हुआ है। "errno" वेरिएबल को "" हेडर फ़ाइल का उपयोग करके एक्सेस किया जा सकता है और इसमें पूर्वनिर्धारित त्रुटि कोड होते हैं जो त्रुटि के कारण के बारे में अतिरिक्त जानकारी साझा करते हैं।  रिटर्न वैल्यू और त्रुटि कोड के महत्व को समझकर, हम त्रुटि के स्रोत की पहचान कर सकते हैं और उचित कार्रवाई कर सकते हैं।

<पी> प्रोग्रामिंग उदाहरण 1:स्ट्रेरर() का उपयोग करके सॉकेट त्रुटियों को पकड़ें
कार्य
<पी> #शामिल
#शामिल करें
#शामिल
#शामिल
#शामिल
#शामिल
पूर्णांक मुख्य ()
{
    int सॉकेट डिस्क्रिप्टर;
    struct sockaddr_in सर्वरएड्रेस;
    // एक सॉकेट बनाएं
    सॉकेटडिस्क्रिप्टर =सॉकेट (AF_INET, SOCK_STREAM, 0);
    यदि (सॉकेट डिस्क्रिप्टर <0)
{
        पेरर ("सॉकेट निर्माण विफल");
        बाहर निकलें(EXIT_FAILURE);
    }

<पी>     // सर्वर पता सेट करें
    सर्वरएड्रेस.sin_family =AF_INET;
    // आइए एक उदाहरण पोर्ट नंबर का उपयोग करें
    सर्वरएड्रेस.सिन_पोर्ट =htons (7070);
    // स्थानीय आईपी पता
    सर्वरएड्रेस.sin_addr.s_addr =inet_addr ("127.0.0.1");
    // सर्वर से कनेक्ट करें
    यदि (कनेक्ट करें (सॉकेटडिस्क्रिप्टर, (स्ट्रक्चर सॉकएड्र * ) और सर्वरएड्रेस, साइजऑफ़ (सर्वरएड्रेस)) <0)
{
        पेरर ("कनेक्शन विफल");
        बाहर निकलें (EXIT_FAILURE);
    }
    // डेटा भेजें और प्राप्त करें
 
    // आइए सॉकेट बंद करें
    बंद करें (सॉकेटडिस्क्रिप्टर);

<पी>     वापसी 0;
}

<पी> आउटपुट: <पी> $ gcc err.c -o err
$ ./त्रुटि
कनेक्शन विफल:कनेक्शन अस्वीकृत

<पी> स्पष्टीकरण: <पी> इस प्रोग्रामिंग उदाहरण में, हम सॉकेट बनाने के लिए सॉकेट() फ़ंक्शन का उपयोग करते हैं। यदि लौटाया गया सॉकेट डिस्क्रिप्टर 0 से कम है, जो सॉकेट निर्माण के दौरान एक त्रुटि को इंगित करता है, तो यह संबंधित त्रुटि संदेश प्रदर्शित करने के लिए "पेरर ()" फ़ंक्शन का उपयोग करता है और यह प्रोग्राम से बाहर निकल जाता है। कनेक्शन स्थापित करने के लिए, यह सर्वर पता सेट करता है और कनेक्ट() फ़ंक्शन का उपयोग करके कनेक्ट करने का प्रयास करता है ताकि यह जांचा जा सके कि रिटर्न मान 0 से कम है या नहीं। कनेक्शन विफलता के मामले में, त्रुटि संदेश प्रदर्शित करने के लिए "पेरोर()" फ़ंक्शन का फिर से उपयोग किया जाता है और प्रोग्राम बाहर निकल जाएगा। इस दृष्टिकोण से, हम C भाषा में सॉकेट त्रुटियों को आसानी से पकड़ सकते हैं। यह हमें सूचनात्मक त्रुटि संदेश दिखाने और प्रोग्राम को ठीक से समाप्त करने की अनुमति देता है।

<पी> प्रोग्रामिंग उदाहरण 2:पेरर() फ़ंक्शन का उपयोग करके सॉकेट त्रुटियों को पकड़ें <पी> #शामिल
#शामिल करें
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल
पूर्णांक मुख्य ()
{
    int सॉकेट डिस्क्रिप्टर;
    struct sockaddr_in सर्वरएड्रेस;

<पी>     // एक सॉकेट बनाएं
    सॉकेटडिस्क्रिप्टर =सॉकेट (AF_INET, SOCK_STREAM, 0);
    यदि (सॉकेट डिस्क्रिप्टर <0)
    {
        fprintf (stderr, "सॉकेट बनाने में विफल:%s \n", strerror (errno));
       
        बाहर निकलें (EXIT_FAILURE);
    }

<पी>     // सर्वर पता सेट करें
    सर्वरएड्रेस.sin_family =AF_INET;
    // आइए एक उदाहरण पोर्ट नंबर का उपयोग करें
    सर्वरएड्रेस.सिन_पोर्ट =htons (7070);
    // स्थानीय आईपी पता
    सर्वरएड्रेस.sin_addr.s_addr =inet_addr ("127.0.0.1");
    // अब हम सर्वर कनेक्शन के लिए प्रयास करते हैं
    यदि (कनेक्ट (सॉकेटडिस्क्रिप्टर, (स्ट्रक्चर सॉकएड्र *) और सर्वरएड्रेस, साइजऑफ़ (सर्वरएड्रेस)) <0) {
        fprintf (stderr, "कनेक्ट करने में विफल:%s\n", strerror (errno));
        बाहर निकलें (EXIT_FAILURE);
    }

<पी>     // डेटा भेजें और प्राप्त करें
    // सॉकेट बंद करें
    यदि (बंद करें (सॉकेट डिस्क्रिप्टर) <0)
    {
        fprintf (stderr, "सॉकेट बंद होने में विफल:%s\n", strerror (errno));
        बाहर निकलें (EXIT_FAILURE);
    }
    प्रिंटफ ("सॉकेट सफलतापूर्वक बंद हुआ।\n");
    वापसी 0;
}

<पी> आउटपुट: <पी> $ जीसीसी त्रुटि.सी -ओ त्रुटि
$ ./त्रुटि
कनेक्ट करने में विफल:कनेक्शन अस्वीकृत

<पी> स्पष्टीकरण: <पी> इस प्रोग्रामिंग उदाहरण में, हम "strerror()" फ़ंक्शन का उपयोग करके C में सॉकेट त्रुटियों को पकड़ते हैं। यह फ़ंक्शन हमें "errno" वेरिएबल में संग्रहीत त्रुटि कोड को मानव-पठनीय त्रुटि संदेश में परिवर्तित करने की अनुमति देता है। "" हेडर फ़ाइल को शामिल करके, हम "strerror()" फ़ंक्शन तक पहुंच सकते हैं और संबंधित त्रुटि संदेश प्राप्त करने के लिए इसे "errno" मान प्रदान कर सकते हैं। यहां इस प्रोग्राम में, सॉकेट बनाने के बाद, हम जांचते हैं कि सॉकेट डिस्क्रिप्टर 0 से कम है या नहीं, जिसका मतलब विफलता है। यदि कोई त्रुटि होती है, तो हम त्रुटि संदेश प्राप्त करने के लिए "errno" मान के साथ "strerror()" फ़ंक्शन का उपयोग करते हैं। "fprintf()" फ़ंक्शन मानक त्रुटि स्ट्रीम पर त्रुटि संदेश प्रदर्शित करता है। अंत में, प्रोग्राम विफलता स्थिति के साथ बाहर निकल जाता है।

निष्कर्ष

<पी> सॉकेट फ़ंक्शंस द्वारा प्रदान किए गए रिटर्न मान और त्रुटि कोड को समझकर, हम सी में इन सॉकेट त्रुटियों को आसानी से पकड़ सकते हैं और संभाल सकते हैं। पहले प्रोग्रामिंग उदाहरण में, हमने बताया कि "पेरर ()" फ़ंक्शन का उपयोग करके त्रुटि को कैसे पकड़ा जाए और मान वापस कैसे किया जाए। दूसरे उदाहरण में, हमने विस्तृत त्रुटि संदेश प्राप्त करने के लिए "strerror()" फ़ंक्शन की व्याख्या की। इन विधियों को समझकर, हम सूचनात्मक त्रुटि संदेश प्रदर्शित कर सकते हैं और सॉकेट प्रोग्रामिंग में अपने प्रोग्राम को ठीक से समाप्त कर सकते हैं।

लेखक के बारे में

<पी> सी में सॉकेट त्रुटियों का पता लगाना:एक व्यावहारिक मार्गदर्शिका

बामदेब घोष

<पी> बामदेब घोष को वायरलेस नेटवर्किंग डोमेन में व्यावहारिक अनुभव है। वह एंड्रॉइड, ब्लूटूथ, लिनक्स कमांड और पायथन के ज्ञान के साथ-साथ वायरलेस या वायर्ड नेटवर्किंग पर वायरशार्क कैप्चर विश्लेषण में विशेषज्ञ हैं। उसकी साइट का अनुसरण करें:wifisharks.com


  1. ऊपरी विकर्ण को C++ में लोअर के साथ स्वैप करें ऊपरी विकर्ण को C++ में लोअर के साथ स्वैप करें

    यह ट्यूटोरियल c++ कोड का उपयोग करके तीन-विकर्ण सरणी की ऊपरी पंक्ति को इसके निचले हिस्से में स्वैप करने के लिए डिज़ाइन किया गया है। इसके अलावा, यदि एक तीन-विकर्ण सरणी एक इनपुट है, तो वांछित परिणाम कुछ इस तरह होना चाहिए; इसके लिए एल्गोरिथम में कार्रवाई की प्रक्रिया इस प्रकार बताई गई है; एल्गोरिदम S

  1. HTML में लिस्ट बुलेट्स और टेक्स्ट के बीच स्पेस कैसे बनाएं? HTML में लिस्ट बुलेट्स और टेक्स्ट के बीच स्पेस कैसे बनाएं?

    HTML में सूची बुलेट और टेक्स्ट के बीच स्थान बनाने के लिए, CSS पैडिंग गुण का उपयोग करें। लेफ्ट पैडिंग पैडिंग-लेफ्ट को टैग लिस्ट आइटम यानी टैग में जोड़ा जाना है। इसके जरिए पैडिंग जुड़ जाती है, जो लिस्ट बुलेट्स और एचटीएमएल में टेक्स्ट के बीच स्पेस बनाएगी। उदाहरण हमारे पास डिस्क बुलेट के साथ निम्न क

  1. HTML में स्टेप एट्रिब्यूट का उपयोग कैसे करें? HTML में स्टेप एट्रिब्यूट का उपयोग कैसे करें?

    HTML इनपुट प्रकार चरण विशेषता कानूनी संख्या अंतराल सेट करती है। चरण संख्या चरण हैं जैसे 0, 4, 8, 12, 16, आदि। चरण विशेषता का उपयोग अधिकतम और न्यूनतम विशेषताओं के साथ कानूनी मूल्यों की एक श्रृंखला बनाने के लिए किया जा सकता है। उदाहरण आप इनपुट चरण विशेषता के साथ संख्याओं का चरण बनाने के लिए निम्न क