2010-09-16 17 views
11

सॉकेट क्लास का उपयोग करते समय कोई बंदरगाह पर सर्वर से एक टीसीपी कनेक्शन स्थापित कर रहा है, लेकिन सर्वर पर सर्वरस्केट प्रत्येक स्वीकृति अनुरोध के लिए एकाधिक क्लाइंट कनेक्शन को संभालने में सक्षम है और अनुरोध को सर्वर पर थ्रेड पर भेजता है। लेकिन एक सर्वर पोर्टसेट क्लास के लिए एक ही बंदरगाह पर एकाधिक टीसीपी कनेक्शन स्वीकार करना संभव है।सर्वरकेट क्लास एक ही पोर्ट पर एकाधिक क्लाइंट कनेक्शन कैसे काम करता है?

क्या इसका मतलब यह है कि यह तय करने के लिए ओएस तक है कि यह कितने कनेक्शन की अनुमति देता है या अधिकतम बैकलॉग की अनुमति है और इसे ओएस के शीर्ष पर एप्लिकेशन द्वारा नियंत्रित किया जा सकता है (मेरा मतलब है कि जावा द्वारा समर्थित अधिकतम बैकलॉग द्वारा प्रतिबंधित है ओएस) और टीसीपी विनिर्देश में बैकलॉग कनेक्शन के लिए कोई निजीकरण है?

बेस्ट reagards,
केशव

+0

उदा देखें [यह उत्तर] (http://stackoverflow.com/questions/3638953/do-tcp-connections-get-moved-to-another-port-after-they-are-opened/3639017#3639017) स्टैक ओवरफ्लो पर। –

उत्तर

8

TCP कनेक्शन की (स्रोत आईपी, स्रोत बंदरगाह, गंतव्य आईपी, गंतव्य बंदरगाह) एक अद्वितीय सेट द्वारा परिभाषित किया गया है। चूंकि सर्वर किसी विशेष पोर्ट से बांधता है, यह उन 4 चरों में से दो को परिभाषित करता है। जब तक कि ग्राहक सभी अलग-अलग आईपी और/या विभिन्न बंदरगाहों से आते हैं, यह कोई मुद्दा नहीं होगा।

और हाँ, ओएस नियंत्रित कर सकता है कि कितने कुल कनेक्शन की अनुमति है, और आपका प्रोग्राम इसे और भी प्रतिबंधित कर सकता है।

+0

क्या इसका मतलब यह है कि हम वास्तव में * असीमित * कनेक्शन कर सकते हैं और केवल 65k नहीं? – Pacerier

+0

असीमित नहीं है, लेकिन आईपी/खेल/डपोर्ट कॉम्बो से बाहर चलना सीमित कारक नहीं होगा। – zigdon

+0

क्या यह सच है कि कंप्यूटर से कनेक्ट होने का प्रयास करने वाले कंप्यूटर में 65536 * 65536 = 4294967296 कनेक्शन की सैद्धांतिक सीमा हो सकती है? या मैंने अपने गणित को गड़बड़ कर दिया .. – Pacerier

-1

ऑपरेटिंग-सिस्टम जिस पर सर्वर सर्वर के विभिन्न कनेक्शनों के बीच अंतर करने के लिए रिमोट पोर्ट नंबर का उपयोग करता है।

+0

यह 4-टुपल का उपयोग करता है। – EJP

3

यह कई ग्राहकों को सेवा देता है और आप चुन सकते हैं कि आप एक ही समय में कितने ग्राहक संभालेंगे।

एक कनेक्शन (उर्फ एक ग्राहक और एक सर्वर के बीच एक Socket केवल ServerIP/serverport से पहचान नहीं है, इसके साथ ClientIP/ClientPort/ServerIP/serverport पहचान है।

आप केवल कनेक्शन स्वीकार करने के लिए है (और आम तौर पर उन्हें अलग धागे में इलाज)।


डिफ़ॉल्ट बैकलॉग आकार 50 है करके, लेकिन आप इसे सेट जब आप अपने ServerSocket बना सकते हैं।

new ServerSocket(21, 100); //Create a server socket with a backlog of 100 

संसाधन:

+0

मुझे नहीं लगता कि आप 'बैकलॉग' को नियंत्रित कर सकते हैं, आप इसे निर्दिष्ट कर सकते हैं लेकिन इसे नियंत्रित नहीं कर सकते हैं, अगर आपको लगता है कि आप कर सकते हैं और कन्स्ट्रक्टर कार्यों का दूसरा तर्क तो आप मेरा इस सवाल को देखना चाहते हैं - http ://स्टैक ओवरफ़्लो।com/प्रश्न/41309474/होने मुद्दा-साथ परीक्षण-बैकलॉग-के रूप में-प्रति-serversocketint पोर्ट-पूर्णांक-बैकलॉग – hagrawal