2011-03-25 13 views
7

जब सॉकेट एपीआई का उपयोग कर एक टीसीपी ग्राहक बनाने के लिए उपलब्ध नहीं से कनेक्ट करने के बंदरगाह है, एक बंदरगाह टीसीपी सर्वर से कनेक्ट करने के लिए स्थानीय होस्ट पर प्रयोग किया जाता है।एक टीसीपी ग्राहक के द्वारा उपयोग एक सर्वर अन्य टीसीपी सर्वर

बंदरगाह कि प्रयोग किया जाता है किसी अन्य अनुप्रयोग जो एक टीसीपी सर्वर के लिए बाध्य करने के लिए है और एक सर्वर के रूप में कार्य के लिए उपलब्ध नहीं हो रहा है।

क्योंकि ग्राहक के लिए इस्तेमाल बंदरगाह गतिशील निर्धारित किया जाता है कि यह एक बंदरगाह है कि मेरे आवेदन एक सर्वर के रूप में उपयोग करना चाहता है हो सकता है।

यह सही है कि टीसीपी ग्राहक गतिशील रूप से एक बंदरगाह का उपयोग करें और उस पोर्ट पर एक सर्वर होने से अन्य कार्यक्रमों को रोकने के लिए ले जाएगा?

क्या कोई क्लाइंट यह नियंत्रित करने के लिए उपयोग कर सकता है कि यह किसी अन्य प्रोग्राम द्वारा आवश्यक पोर्ट पर कब्जा नहीं करता है?

+0

टिप्पणी से सुधारा आप हमें यह बताएं कि आप किस भाषा का प्रयोग कर रहे हैं। फिर हम एक नमूना कोड प्रदान कर सकते हैं। –

+0

हाय, मैं सी –

उत्तर

8

क्या यह सच है कि टीसीपी क्लाइंट गतिशील रूप से उस बंदरगाह पर सर्वर होने से अन्य प्रोग्रामों का उपयोग करने और रोकने के लिए बंदरगाह उठाएगा?

हाँ, यह है।

क्या क्लाइंट यह नियंत्रित करने के लिए उपयोग करता है कि यह किस पोर्ट का उपयोग करता है यह सुनिश्चित करता है कि यह किसी अन्य प्रोग्राम द्वारा आवश्यक पोर्ट पर कब्जा नहीं करता है?

हाँ, आप कर सकते हैं, लेकिन आप नहीं करना चाहिए। बाइंड संपत्ति का प्रयोग करें।

ठीक .. बात heres:

जब आप एक सर्वर से कनेक्शन स्थापित है, तो आप एक सॉकेट बंदरगाह से अधिक है 1024 बिंदु है खोलते हैं, तो यह एक उच्च पोर्ट संख्या होने जा रहा है।

आपका सर्वर TCP पोर्ट से अधिक 1024 मूल रूप से आप एक कम बंदरगाह में चल रहे सर्वर रखना चाहिए खुला नहीं करना चाहिए। यही वह है जो सभी http दस्तावेज़ हमें बताते हैं।

यदि एक बंदरगाह पहले से ही लिया जाता है तुम भी जाँच कर सकते हैं, और यदि हां, तो आप एक बंदरगाह में अपने सर्वर सॉकेट खोल सकते हैं।

+1

-1 का उपयोग कर रहा हूं: आप बंदरगाह को नियंत्रित कर सकते हैं, और वास्तविक सीमा किसी भी तरह से> 5000 होने की आवश्यकता नहीं है। Windows XP/2003 उदास डिफ़ॉल्ट रूप से सीमा 1025-5000 का उपयोग करेगा। – Erik

+0

हाँ। मैंने जवाब संपादित किया जब मुझे एहसास हुआ कि मैं इसके बारे में भूल गया था। लेकिन आपको ऐसा नहीं करना चाहिए, जब तक आप उस समस्या के बारे में सही न हों जो आप कर सकते हैं। –

+0

अब डाउनवोट हटा दिया गया। – Erik

2

हां, बंदरगाह को पूर्व निर्धारित श्रेणी से चुना जाएगा जो ओएस से ओएस में भिन्न होता है, और अन्य उपयोग के लिए अवरुद्ध होता है। यदि आपको इसकी आवश्यकता हो तो आप bind के साथ एक विशिष्ट पोर्ट का चयन कर सकते हैं।

संपादित करें:

केवल मामले आप एक ही स्थानीय बंदरगाह के लिए बाध्य कई TCP सॉकेट हो सकता है जहां/आईपी है जब आप accept() एक सुनने के सॉकेट से नए सॉकेट। आप कभी भी उपयोग में पोर्ट/आईपी के लिए bind() एक टीसीपी सॉकेट नहीं कर सकते हैं। वहाँ भी SO_REUSEADDR पर कुछ भ्रम की स्थिति, इस सॉकेट विकल्प बंदरगाह पुन: उपयोग, यह सिर्फ नियमों को आराम जब वहाँ केवल मृत समय बाहर एक बंदरगाह आप चाहते करने के लिए बाध्य कनेक्शन की अनुमति नहीं है।

-1

यदि एक कार्यक्रम सुन एक बंदरगाह पर बाध्य है मैं एक के रूप में अच्छी तरह से विश्वास नहीं है। आम तौर पर, निचले बंदरगाहों को पोर्ट 80 पर HTTP जैसी कुछ सेवाओं के लिए आरक्षित किया जाता है। यदि आप एक यादृच्छिक बंदरगाह चाहते हैं तो आपको 1024 से ऊपर एक उत्पन्न करना चाहिए।आमतौर पर इस्तेमाल किया बंदरगाहों की सूची के लिए यहाँ देखो: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

संपादित करें: नीचे

+0

इससे कोई फर्क नहीं पड़ता कि कोई सॉकेट सुन रहा है या नहीं, अगर यह एक बंदरगाह से बंधे हैं तो आप एक ही बंदरगाह पर एक नई असंबंधित सॉकेट नहीं बांध सकते हैं। – Erik

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