हम यूडीपी प्राप्त के लिए जानते हैं, हम Socket.ReceiveFrom या UdpClient.receiveमैं सॉकेट यूडीपी के नीचे बफर आकार कैसे सेट कर सकता हूं? सी #
Socket.ReceiveFrom का उपयोग करें। एक बाइट सरणी स्वीकार आप में यूडीपी डेटा डाल करने के लिए से
UdpClient.receive सीधे एक बाइट रिटर्न सरणी जहां डाटा
मेरा प्रश्न है कैसे सॉकेट अंदर बफर आकार निर्धारित करने के लिए है। मुझे लगता है कि ओएस यूडीपी डेटा प्राप्त करने के लिए अपने बफर को बनाए रखता है, है ना? उदाहरण के लिए, यदि मेरी मशीन पर एक udp पैकेट भेजा जाता है, तो ओएस इसे एक बफर में रखेगा और हमें सॉकेट पर प्रतीक्षा करेगा। ReceiveFrom या UdpClient.receive, है ना?
मैं उस आंतरिक बफर के आकार को कैसे बदल सकता हूं?
मैं Socket.ReceiveBuffSize की कोशिश की है, यह बिल्कुल यूडीपी के लिए कोई प्रभाव नहीं है, और यह स्पष्ट रूप से कहा कि यह TCP विंडो के लिए है। इसके अलावा मैंने बहुत सारे प्रयोग किए हैं जो सॉकेट साबित करते हैं। रिसीव बफर आकार यूडीपी के लिए नहीं है।
किसी यूडीपी आंतरिक बफर के लिए कुछ अंतर्दृष्टि साझा कर सकते हैं ???
धन्यवाद
मैं जैसे के लिए यहाँ कुछ पदों को देखा है,,
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a
डेव ने कहा Socket.ReceiveBufferSize यूडीपी के लिए आंतरिक बफर सेट कर सकते हैं कि। मैं असहमत हूं।
प्रयोग मैंने किया था इस तरह है:
27 मेजबान एक ही समय में एक लैन के भीतर मेरे लिए एक 10KB udp पैकेट भेज (कम से कम लगभग)। मेरे पास प्रत्येक पैकेट को संभालने के लिए थोड़ी देर लूप है। प्रत्येक पैकेट के लिए, मैं एक धागा इसे संभालता हूं। मैंने पैकेट प्राप्त करने के लिए UdpClient या सॉकेट का उपयोग किया।
मैंने लगभग 50% पैकेट खो दिए। मुझे लगता है कि यह यूडीपी भेजने का एक विस्फोट है और मैं समय पर उन सभी को संभाल नहीं सकता।
यही कारण है कि मैं यूडीपी के लिए बफर आकार बढ़ाना चाहते हैं। कहें, अगर मैं बफर आकार को 1 एमबी में बदलता हूं, तो 27 * 10 केबी = 270 केबी डेटा बफर में स्वीकार किया जा सकता है, है ना?
मैं कई कई मूल्यों के Socket.ReceiveBufferSize बदलते कोशिश की, और यह सिर्फ सब पर प्रभाव नहीं है।
कोई भी मदद कर सकता है?
@heavyd: आपके उत्तर के लिए धन्यवाद। मेरा कोड आपके जैसा ही है। लेकिन यदि आप रुचि रखते हैं, तो आप एक साधारण प्रयोग कर सकते हैं। हमारे पास अलग-अलग दो वर्ग हैं - सर्वर और क्लाइंट। अपने क्लाइंट.cs में, आप बस अपने स्थानीय पोर्ट 8888 पर 200 पैकेट (10 केबी प्रत्येक) भेजने के लिए UdpClient का उपयोग करते हैं। (जो भी पोर्ट आप चाहते हैं) अपने सर्वर.cs में, आप लगातार अपने कोड में दिखाए गए जैसे ही प्राप्त करते हैं बेशक, कृपया पहले अपना server.cs चलाएं। मेरा परिणाम 9 0% पैकेट प्राप्त किए जा सकते हैं। मुद्दा यह है कि यूडीपी भेजना एक विस्फोट है कि बहुत से पैकेट आते हैं और आपका सर्वर संभाल नहीं सकता है। और बफर ओवरफ्लो। – Jack
हां, और क्या आप कह रहे हैं कि एक मूल्य से ReceiveBufferSize समायोजित करें, '4096' उच्च मान पर कहें,' 4 * 4096' कुछ भी नहीं करता है? – heavyd
@heavyd, क्या मुझे पता है कि ReceiveBufferSize के लिए ऊपरी सीमा क्या है? – Jack