सॉकेट (स्ट्रीम) बनाम सॉकेट (डेटाग्राम) के बीच क्या अंतर है? एक दूसरे पर क्यों उपयोग करें?नेटवर्क प्रोग्रामिंग में स्ट्रीम और डेटाग्राम के बीच क्या अंतर है?
उत्तर
बहुत समय पहले मैंने दोनों के बीच अंतर को समझाने के लिए एक महान सादृश्य पढ़ा था। मुझे याद नहीं है कि मैंने इसे कहाँ पढ़ा है, दुर्भाग्यवश मैं इस विचार के लिए लेखक को श्रेय नहीं दे सकता, लेकिन मैंने मूल सादृश्य में भी अपना खुद का ज्ञान जोड़ा है। तो यहां जाता है:
एक स्ट्रीम सॉकेट एक फोन कॉल की तरह है - एक तरफ कॉल, अन्य उत्तरों, आप एक दूसरे को नमस्कार (टीसीपी में एसईएन/एसीके) कहते हैं, और फिर आप जानकारी का आदान-प्रदान करते हैं। एक बार पूरा हो जाने के बाद, आप अलविदा कहें (टीसीपी में एफआईएन/एसीके)। अगर एक तरफ अलविदा नहीं सुनता है, तो वे आमतौर पर दूसरी पीठ को कॉल करेंगे क्योंकि यह एक अप्रत्याशित घटना है; आम तौर पर ग्राहक सर्वर से पुनः कनेक्ट होगा। एक गारंटी है कि डेटा आपके द्वारा भेजे जाने से अलग आदेश में नहीं आएगा, और एक उचित गारंटी है कि डेटा क्षतिग्रस्त नहीं होगा।
एक डेटाग्राम सॉकेट कक्षा में एक नोट पास करने की तरह है। उस मामले पर विचार करें जहां आप उस व्यक्ति के बगल में सीधे नहीं हैं जहां आप नोट पास कर रहे हैं; नोट व्यक्ति से व्यक्ति की यात्रा करेगा। यह अपने गंतव्य तक नहीं पहुंच सकता है, और इसे वहां पहुंचने के समय संशोधित किया जा सकता है। यदि आप एक ही व्यक्ति को दो नोट पास करते हैं, तो वे उस क्रम में पहुंच सकते हैं जिसका आप इरादा नहीं रखते थे, क्योंकि कक्षाओं के माध्यम से नोट्स रूट के समान नहीं हो सकते हैं, एक व्यक्ति शायद दूसरे के रूप में एक नोट पास नहीं कर सकता है, आदि
तो जब आप क्रम में जानकारी रखते हैं और बरकरार है तो आप एक स्ट्रीम सॉकेट का उपयोग करते हैं। फ़ाइल स्थानांतरण प्रोटोकॉल यहां एक अच्छा उदाहरण हैं। आप अपनी सामग्री के साथ यादृच्छिक रूप से चारों ओर घिरा हुआ और क्षतिग्रस्त कुछ फ़ाइल डाउनलोड नहीं करना चाहते हैं!
जब आप किसी स्ट्रीम के ऊपरी ओवरहेड नहीं चाहते हैं तो ऑर्डर समय पर डिलीवरी (वीओआईपी या गेम प्रोटोकॉल सोचें) से कम महत्वपूर्ण है, तो आप डेटाग्राम सॉकेट का उपयोग करेंगे (यही कारण है कि DNS मुख्य रूप से डेटाग्राम प्रोटोकॉल है, ताकि सर्वर कई बार कई अनुरोधों को बहुत जल्दी प्रतिक्रिया दे सकें), या जब डेटा कभी भी अपने गंतव्य तक पहुंचने पर बहुत ज्यादा परवाह नहीं करता है।
वीओआईपी/गेम केस पर विस्तार करने के लिए, ऐसे प्रोटोकॉल में अपना डेटा-ऑर्डरिंग तंत्र शामिल है। लेकिन अगर एक पैकेट क्षतिग्रस्त हो गया है या खो गया है, तो आप फिर से भेजने के अनुरोध को जारी करने के लिए स्ट्रीम प्रोटोकॉल (आमतौर पर टीसीपी) पर इंतजार नहीं करना चाहते हैं - आपको जल्दी से ठीक होने की आवश्यकता है। टीसीपी को पुनर्प्राप्त करने में कुछ मिनट लग सकते हैं, और रीयलटाइम प्रोटोकॉल जैसे गेमिंग या वीओआईपी के लिए भी तीन सेकंड अस्वीकार्य हो सकते हैं! यूडीपी जैसे डेटाग्राम प्रोटोकॉल का उपयोग करने से सॉफ्टवेयर खोए गए डेटा को अनदेखा करके या टीसीपी की तुलना में जल्द से जल्द अनुरोध कर सॉफ़्टवेयर को इस तरह की घटना से ठीक से पुनर्प्राप्त करने की अनुमति देता है।
वीओआईपी खोए गए डेटा को अनदेखा करने के लिए एक अच्छा उम्मीदवार है - एक पार्टी सिर्फ एक छोटा सा अंतर सुनती है, जैसे किसी सेल फोन पर किसी से बात करते समय क्या होता है जब उनके पास खराब स्वागत होता है। गेमिंग प्रोटोकॉल अक्सर थोड़ा अधिक जटिल होते हैं, लेकिन किए गए कार्यों को आम तौर पर गायब डेटा को अनदेखा करना होगा (यदि बाद में प्राप्त डेटा खो गया डेटा से अधिक हो जाता है), लापता डेटा का पुनः अनुरोध करें, या एक पूर्ण राज्य अपडेट का अनुरोध करें सुनिश्चित करें कि ग्राहक का राज्य सर्वर के साथ सिंक हो रहा है।
स्ट्रीम सॉकेट:
- समर्पित & बिंदु से बिंदु सर्वर और ग्राहक के बीच चैनल।
- डेटा ट्रांसमिशन के लिए टीसीपी प्रोटोकॉल का उपयोग करें।
- विश्वसनीय और हानिरहित।
- इसी तरह के आदेश में भेजा गया/प्राप्त किया गया डेटा।
- खो/गलत डेटा
डेटाग्राम सॉकेट ठीक करने के लिए लंबे समय:
- सर्वर और ग्राहक के बीच कोई समर्पित & बिंदु से बिंदु चैनल।
- डेटा ट्रांसमिशन के लिए यूडीपी का उपयोग करें।
- 100% विश्वसनीय नहीं है और डेटा खो सकता है।
- डेटा/आदेश नहीं हो सकता है एक ही
- परवाह या तेजी से मत खो/गलत डेटा
- 1. जावा में स्ट्रीम और पाठक के बीच क्या अंतर है?
- 2. सी प्रोग्रामिंग में * और ऑपरेटरों के बीच क्या अंतर है?
- 3. दृश्य और स्ट्रीम के बीच क्या अंतर है?
- 4. ग्राफ़ डेटाबेस और नेटवर्क डेटाबेस के बीच क्या अंतर है?
- 5. घोषणात्मक और अनिवार्य प्रोग्रामिंग के बीच क्या अंतर है?
- 6. कर्नेल और उपयोगकर्ता मोड प्रोग्रामिंग के बीच क्या अंतर है?
- 7. स्क्रम और चरम प्रोग्रामिंग के बीच क्या अंतर है?
- 8. क्या स्ट्रीम के बीच का अंतर "<<" और लिखें
- 9. सॉकेट प्रोग्रामिंग और एचटीपी प्रोग्रामिंग के बीच अंतर
- 10. जीन अभिव्यक्ति प्रोग्रामिंग और कार्टेशियन जेनेटिक प्रोग्रामिंग के बीच अंतर
- 11. सिस्टम प्रोग्रामिंग भाषा और अनुप्रयोग प्रोग्रामिंग भाषाओं के बीच अंतर
- 12. स्कैला में इटरेटर और स्ट्रीम के बीच अंतर?
- 13. ओओपी में पहचान और समानता के बीच क्या अंतर है?
- 14. पर्ल में ऑब्जेक्ट और क्लास के बीच क्या अंतर है?
- 15. # {} $ {} और% {} के बीच क्या अंतर है?
- 16. के बीच क्या अंतर है:। और: आर !?
- 17. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 18. संदेश उन्मुख प्रोटोकॉल और स्ट्रीम उन्मुख प्रोटोकॉल के बीच अंतर
- 19. $ और $$ के बीच क्या अंतर है?
- 20. भिन्नता और '-' के बीच क्या अंतर है?
- 21. "$^एन" और "$ +" के बीच क्या अंतर है?
- 22. $ {} और # {} के बीच अंतर क्या हैं?
- 23. एमपी 4 और एमपीईजी के बीच क्या अंतर है?
- 24. सी # नेटवर्क प्रोग्रामिंग और संसाधन उपयोग
- 25. स्टैक ओवरफ़्लो और बफर ओवरफ़्लो के बीच क्या अंतर है?
- 26. क्या "लंबाई" और "आकार" (प्रोग्रामिंग में, निश्चित रूप से) शब्दों के बीच कोई तकनीकी अंतर है?
- 27. खोल प्रोग्रामिंग में $ (कमांड) और 'कमांड' के बीच क्या अंतर है?
- 28. एरलांग और अन्य भाषा में मल्टीकोर प्रोग्रामिंग के बीच क्या अंतर है?
- 29. बाहर निकलने और वापसी के बीच क्या अंतर है?
- 30. प्रोग्रामिंग पैराडिग, डिजाइन पैटर्न और एप्लिकेशन आर्किटेक्चर के बीच अंतर?
सीधे शब्दों में SYNACK के विस्तार सहित के लिए शानदार पुनर्प्राप्त प्राप्त भेजा है। – LazerSharks
यह उदाहरण, या एक बहुत ही समान, लिनक्स प्रोग्रामिंग इंटरफेस से है। 2010 संस्करण में इन उदाहरणों को पेज 1155 और 1159 पर शामिल किया गया है। – Josh