टीसीपी/आईपी, साथ ही यूडीपी को संभालने के लिए परिभाषित करने की जरूरत, पैकेट उनके आकार के लिए कुछ संदर्भ शामिल हैं । IP header में एक 16-बिट फ़ील्ड है जो बाइट्स में आईपी हेडर और डेटा की लंबाई निर्दिष्ट करता है। TCP header में एक 4-बिट फ़ील्ड है जो 32-बिट शब्दों में TCP शीर्षलेख का आकार निर्दिष्ट करता है। UDP header में एक 16-बिट फ़ील्ड है जो बाइट्स में यूडीपी हेडर और डेटा की लंबाई निर्दिष्ट करता है।
यह बात है।
विंडोज में मानक रन-ऑफ-द-मिल सॉकेट का उपयोग करना, चाहे आप System.Net.Sockets नामस्थान में C# या Win32 में मूल Winsock सामग्री का उपयोग कर रहे हों, आप कभी भी आईपी/टीसीपी/यूडीपी शीर्षलेख नहीं देखते । ये हेडर बंद हो जाते हैं ताकि जब आप सॉकेट पढ़ते हैं तो आपको वास्तविक पेलोड, यानी, भेजा गया डेटा है।
सॉकेट का उपयोग करके मैंने जो कुछ भी देखा और किया है, उससे सामान्य पैटर्न यह है कि आप उस एप्लिकेशन-स्तरीय हेडर को परिभाषित करते हैं जो उस डेटा से पहले है जिसे आप भेजना चाहते हैं। कम से कम, इस शीर्षलेख में डेटा का आकार अनुसरण करना चाहिए। यह आपको अपने आकार के अनुमान के बिना प्रत्येक "संदेश" को पूरी तरह से पढ़ने की अनुमति देगा। आप जितना चाहें उतना फैंसी प्राप्त कर सकते हैं, उदाहरण के लिए, सिंक पैटर्न, सीआरसी, संस्करण, संदेश का प्रकार इत्यादि, लेकिन "संदेश" का आकार आप सभी वास्तव में की आवश्यकता है।
और इसके लायक होने के लिए, मैं एंड-पैकेट डिलीमीटर के बजाय हेडर का उपयोग करने का सुझाव दूंगा। मुझे यकीन नहीं है कि ईओपी डिलीमीटर के लिए कोई संकेतक नुकसान है, लेकिन हेडर वह दृष्टिकोण है जो मैंने देखा है अधिकांश आईपी प्रोटोकॉल द्वारा उपयोग किया जाता है।इसके अलावा, यह मेरे संदेश में कुछ पैटर्न के लिए इंतजार करने के बजाय शुरुआत से एक संदेश को संसाधित करने के लिए मुझे अधिक सहज लगता है ताकि यह संकेत दिया जा सके कि मेरा संदेश पूरा हो गया है।
संपादित करें: मुझे केवल Google प्रोटोकॉल बफर परियोजना के बारे में पता चला है। जो मैं बता सकता हूं, यह डब्ल्यूसीएफ के लिए एक बाइनरी सीरियलाइजेशन/डी-सीरियलाइजेशन स्कीम है (मुझे यकीन है कि यह सकल ओवरम्प्लिफिकेशन है)। यदि आप डब्ल्यूसीएफ का उपयोग कर रहे हैं, तो आपको भेजे जाने वाले संदेशों के आकार के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि डब्ल्यूसीएफ प्लंबिंग दृश्यों के पीछे इसका ख्याल रखती है, शायद यही कारण है कि आपको प्रोटोकॉल में संदेश की लंबाई से संबंधित कुछ भी नहीं मिला है बफर दस्तावेज। हालांकि, सॉकेट के मामले में, आकार को जानना ऊपर चर्चा के रूप में जबरदस्त मदद करेगा। मेरा अनुमान है कि आप प्रोटोकॉल बफर का उपयोग करके अपने डेटा को क्रमबद्ध करेंगे और फिर इसे भेजने से पहले जो भी एप्लीकेशन हेडर आप आते हैं उस पर ध्यान दें। प्राप्त करने के पक्ष में, आप हेडर को खींच लेंगे और फिर शेष संदेश को डी-क्रमबद्ध करेंगे।
स्रोत
2009-03-01 05:32:43
यदि आपका मतलब प्रोटोबफ-नेट है, तो यह सिर्फ डब्ल्यूसीएफ के लिए नहीं है; परियोजना में सॉकेट उदाहरण हैं। –