2011-12-22 11 views
13

संभव डुप्लिकेट:
On localhost, how to pick a free port number?पायथन में एक मुफ्त पोर्ट नंबर कैसे चुनें?

मेरे आवश्यकता इस सवाल से अलग है।

On localhost, how to pick a free port number?

मैं अजगर का उपयोग कर किसी अन्य प्रक्रिया का एक परीक्षण सेटअप लिख रहा हूँ। दूसरी प्रक्रिया को पास करने के लिए पोर्ट नंबर की आवश्यकता होती है (कमांड लाइन पैरामीटर के रूप में कहें)। मैं कुछ यादृच्छिक पोर्ट नंबर को हार्ड-कोड नहीं कर सकता क्योंकि कई उपयोगकर्ता आमतौर पर एक ही बॉक्स में एक ही परीक्षण चलाते हैं। अब, मैं अजगर में एक मुफ्त बंदरगाह का चयन कैसे करूं?

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

मैं अजगर में एक सॉकेट बनाने नहीं कर रहा हूँ। मुझे कमांड लाइन तर्क के रूप में किसी अन्य प्रक्रिया में किसी संख्या को पास करने की आवश्यकता है।

डीआरएच के उत्तर से, मैं एक डमी सॉकेट बना सकता हूं, अपना पोर्ट नंबर प्राप्त कर सकता हूं, इसे बंद कर सकता हूं और वास्तविक प्रक्रिया में भेज सकता हूं। क्या ऐसा करने का कोई बेहतर तरीका है?

+4

आपकी आवश्यकता किस तरह से अलग है? – wim

+1

मैं अजगर में सॉकेट नहीं बना रहा हूं। तो मैं ओएस से एक मुफ्त बंदरगाह देने के लिए कैसे कहूं? मुझे उस नंबर को किसी अन्य प्रक्रिया में कमांड लाइन तर्क के रूप में पास करने की आवश्यकता है। – balki

+0

मुझे ओएस से मुफ्त पोर्ट नंबर के बारे में पूछने के बारे में निश्चित नहीं है। यदि आप सॉकेट खोलने के बिना कई बार पूछते हैं तो क्या होगा? क्या यह गारंटी है कि आपको प्रत्येक अनुरोध पर अलग-अलग पोर्ट नंबर मिलेंगे? – jcollado

उत्तर

12

आपके द्वारा पूछे जाने वाले कार्यों को करने का कोई सुरक्षित तरीका नहीं है। यहां तक ​​कि यदि ओएस आपके लिए एक बंदरगाह वापस कर सकता है जो वर्तमान में मुफ़्त है, तो इस बात की कोई गारंटी नहीं है कि उस पोर्ट के बीच एक और प्रक्रिया उस सॉकेट को बाँध नहीं देगी जब आप बंदरगाह का अनुरोध करते हैं और जब आप जिस एप्लिकेशन को बुलाते हैं, उससे जुड़ने का प्रयास किया जाता है।

यह देखते हुए कि, अगर आप सिर्फ एक बंदरगाह संभावना है कि नि: शुल्क है के लिए देख रहे हैं, तो आप के रूप में यहाँ वर्णित On localhost, how to pick a free port number? बंदरगाह 0 करने के लिए बाध्य कर सकता है, जिसके परिणामस्वरूप सॉकेट (बंदरगाह को मुक्त) बंद कर दें, और फिर अपने आवेदन करने के लिए है कि मूल्य पारित ।

+0

मुझे लगता है कि इस बीच बंदरगाह प्राप्त करने वाली एक और प्रक्रिया दुर्लभ होगी। तो मैं इसके साथ जाऊंगा। वैसे भी मैं एक डमी सॉकेट बनाने और इसे बंद करने के बजाय ओएस से पूछने का बेहतर तरीका उम्मीद कर रहा था। – balki

+7

रिकॉर्ड के लिए, यहां उस सुझाव का कार्यान्वयन है: https://gist.github.com/3979133 –

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