2011-04-28 14 views
14

मैं इस अजीब चीज में आया हूं कि मुझे एप्लिकेशन देखने के लिए मिला है कि डिफ़ॉल्ट रूप से वे SOCK_STREAM फ़ंक्शन का उपयोग करते हैं। ऐसा क्यों है? क्या यह SOCK_STREAM बस कई धाराएं बना रहा है? या यह मानक SOCK_STREAM फ़ंक्शन टीसीपी स्ट्रीम बनाने के लिए उपलब्ध है ??अजीब बात - SOCK_DGRAM और SOCK_STREAM?

मैंने सोचा था कि सुनामी यूडीपी पर आधारित है, लेकिन अभी भी टीसीपी जैसे की तरह कुछ सुविधाओं को होने टीसीपी निष्पक्षता, friendlyness आदि

किसी कुछ प्रकाश इस मुद्दे पर शेड कर सकते हैं? मैं पूरी तरह इस पर उलझन में हूँ .. कुल नहीं जाना मेरे मन :(

उत्तर

6

अद्यतन के लिए: मेरा उत्तर प्रासंगिक नहीं लगता है, लेकिन मूल प्रश्न UDT करने के लिए भेजा है, जो एक कनेक्शन उन्मुख प्रोटोकॉल है पर बनाया गया । यूडीपी के शीर्ष अधिक यहाँ जानकारी: http://en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol


UDT जो की नकल करता है क्लासिक बीएसडी सॉकेट एपीआई एपीआई प्रदान करने के लिए, तो यह दोनों स्ट्रीम और आंकड़ारेख उन्मुख अनुप्रयोगों के लिए, एक ड्रॉप में स्थानापन्न के रूप में इस्तेमाल किया जा सकता प्रतीत होता है की जाँच करें जैसे। sendmsg और recvmsg - अगर SOCK_STREAM साथ बनाई गई एक सॉकेट पर इस्तेमाल दोनों एक अपवाद फेंक, और सभी धारा उन्मुखी टेड एपीआई SOCK_DGRAM के साथ बनाई गई सॉकेट के लिए एक अपवाद फेंक देते हैं।

SOCK_DGRAM के मामले में यह कुछ अतिरिक्त प्रसंस्करण करता है, हालांकि यह इस मामले में पारदर्शी रूप से यूडीपी सॉकेट को लपेटता नहीं है - जहां तक ​​मैं त्वरित समीक्षा के बाद कोड को समझता हूं (मैं यूडीटी आंतरिक से परिचित नहीं हूं या प्रोटोकॉल spec)। technical papers पढ़ना बहुत मदद कर सकता है।

लाइब्रेरी हमेशा एक अंतर्निहित, वास्तविक "सॉकेट" डेटाग्राम के रूप में बनाता है (चैनल.cpp, CChannel::open देखें)।

25

टीसीपी लगभग हमेशा SOCK_STREAM उपयोग करता है और यूडीपी SOCK_DGRAM उपयोग करता है।

टीसीपी/SOCK_STREAM एक कनेक्शन आधारित प्रोटोकॉल है। कनेक्शन स्थापित किया गया है और दोनों पक्षों के पास वार्तालाप है जब तक कि किसी एक पक्ष द्वारा या किसी नेटवर्क त्रुटि से कनेक्शन समाप्त नहीं हो जाता है।

यूडीपी/SOCK_DGRAM एक आंकड़ारेख आधारित प्रोटोकॉल है। आप एक डेटाग्राम भेजते हैं और एक जवाब प्राप्त करते हैं और फिर कनेक्शन समाप्त हो जाता है।

  • यदि आप एकाधिक पैकेट भेजते हैं, तो टीसीपी उन्हें आदेश देने के लिए वादा करता है। यूडीपी नहीं करता है, इसलिए अगर ऑर्डर करते हैं तो रिसीवर को उन्हें जांचना होगा।

  • यदि कोई टीसीपी पैकेट खो जाता है, तो प्रेषक बता सकता है। यूडीपी के लिए ऐसा नहीं है।

  • यूडीपी डेटाग्राम आकार में सीमित हैं, स्मृति से मुझे लगता है कि यह 512 बाइट्स है। टीसीपी उससे ज्यादा बड़े गांठ भेज सकता है।

  • टीसीपी थोड़ा और मजबूत है और अधिक चेक बनाता है। यूडीपी एक छाया हल्का वजन (कम कंप्यूटर और नेटवर्क तनाव) है।

कैसे आप अन्य कंप्यूटर के साथ बातचीत करना चाहते हैं के लिए प्रोटोकॉल उचित चुनें।

+0

मैं ईएमबीओएस से आईपी स्टैक का उपयोग करता हूं। मैंने SOCK_DGRAM प्रकार की एक सॉकेट बनाई है।लेकिन जब मैं यूडीपी पैकेट प्राप्त करता हूं तो चुनिंदा फ़ंक्शन केवल पहली बार आक्रमण कर रहा है .... क्या इस मामले में सॉकेट प्रकार के साथ कुछ करने के लिए कुछ है? –

+0

@GinuJacob - मुझे EMBOS के बारे में कुछ भी पता नहीं है। एक नया प्रश्न बनाएं और टैग का चयन करें (जैसे कि "EMBOS") जो आपकी मदद करने के लिए सही कौशल वाले लोगों को आकर्षित करेगा। –

+1

यूडीपी/SOCK_DGRAM एक डेटाग्राम-आधारित प्रोटोकॉल है, जिसमें कोई कनेक्शन शामिल नहीं है। आप किसी भी डेटाग्राम भेजते हैं और किसी भी संख्या में डेटाग्राम प्राप्त करते हैं। यह एक "अविश्वसनीय सेवा" है। –

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