2009-12-21 30 views
10

जब मैं प्रोग्राम से पोर्ट 80 पर सॉकेट बांधने का प्रयास करता हूं तो मुझे त्रुटि मिलती है, लेकिन एक ही पोर्ट 80 के साथ-साथ दो ब्राउज़र कैसे सुन सकते हैं?पोर्ट ब्राउज़र पर एक साथ दो ब्राउज़र कैसे सुनते हैं?

+18

सर्वर सुनता है, ब्राउज़र कनेक्ट करता है ... – miku

+1

जब पोर्ट 80 के साथ कोई कनेक्शन है, तो दोनों प्रोग्रामों में से कौन सा जवाब देना चाहिए? –

+1

@ अलवरो यह नहीं है कि सॉकेट कैसे काम करते हैं। –

उत्तर

17

ब्राउज़र बंदरगाह 80 पर, HTTP सर्वर (हालांकि कि सिर्फ सम्मेलन है, आप आसानी से 80 पोर्ट का उपयोग कर एक FTP या टेलनेट सर्वर हो सकता था) न सुनें

टीसीपी/आईपी में, एक "सत्र" अद्वितीय होना चाहिए और सत्र को 5-ट्यूपल (protocol, sourceIP, sourcePort, destinationIP, destinationPort) के रूप में परिभाषित किया जाना चाहिए। यह पैकेट को इंटरनेट पर सही ढंग से रूट करने की अनुमति देता है।

आमतौर पर जब कोई ग्राहक किसी सर्वर से संपर्क करने का प्रयास करता है, तो यह 0 को इसके स्रोत पोर्ट के रूप में निर्दिष्ट करता है जिसका अर्थ है कि ऑपरेटिंग सिस्टम इसे एक अप्रयुक्त एक असाइन करता है। इसका मतलब है कि ग्राहक वास्तव में पोर्ट 80 के बजाय पर पोर्ट पर सुनेंगे।

तो जब आप माइक्रोसॉफ्ट के वेब पृष्ठों तक पहुंचने के लिए बाहर जाते हैं तो आपको (TCP, mybox.com, 1101, www.microsoft.com, 80) गुणों के साथ सत्र मिल सकता है।

यदि आपको लगता है कि आप अपने सर्वर को पोर्ट 80 पर बाध्य नहीं कर सकते हैं, तो इसकी संभावना अधिक होगी क्योंकि आपके पास पहले से ही उस पोर्ट पर चलने वाला सर्वर है, या आपके प्रोग्राम में उस बंदरगाह से बंधने के लिए आवश्यक विशेषाधिकार नहीं हैं (पोर्ट्स से कम 1024 आमतौर पर विशेषाधिकार प्राप्त बंदरगाह माना जाता है)।

रनिंग netstat -a आपको बता देंगे एक सर्वर पोर्ट 80 के लिए बाध्य कर रहा है या नहीं (लिनक्स या Windows पर)।(http या अगर यह सेवा के नाम करने के लिए बंदरगाहों को हल है) बंदरगाह 80 पर एक श्रोता के लिए देखो, की तरह कुछ:

tcp 0 0 localhost:http *:* LISTEN 
+0

आप सत्र को 5-टुपल '(प्रोटोकॉल, स्रोतआईपी, गंतव्यआईपी, स्रोतपोर्ट, गंतव्यपोर्ट) के रूप में सूचीबद्ध करते हैं, लेकिन फिर आप उदाहरण देते हैं '(टीसीपी, mybox.com, 1101, www.microsoft.com, 80)'। यह नहीं होना चाहिए '(टीसीपी, mybox.com, www.microsoft.com, 1101, 80) '? –

+1

@ जोन, इसके लिए धन्यवाद। टुपल का उद्देश्य किसी भी तरह से आदेश देने का इरादा नहीं था, यह केवल सत्र की पहचान करने के लिए आवश्यक जानकारी थी। मैं इसे स्थिरता के लिए ठीक कर दूंगा, क्योंकि आप बिल्कुल सही हैं कि इससे भ्रम पैदा हो सकता है। – paxdiablo

18

वे पोर्ट 80 पर नहीं सुनते हैं, यदि आप SSL का उपयोग कर रहे हैं (या किसी अन्य बंदरगाह पर यदि व्यवस्थापक सम्मेलन के साथ टूट गया है, तो आपने http://www.site.com:8080 जैसे यूआरएल देखे होंगे पोर्ट 8080 पर स्थापित किया गया था)।

ब्राउज़र एक यादृच्छिक उच्च-क्रमांकित बंदरगाह से अनुरोध करेगा ताकि ब्राउज़र एक ही समय में सक्रिय हो सके।

paxdiablo कहते हैं, तुम क्या कार्यक्रमों कनेक्शन के लिए सुन रहे हैं देखने के लिए netstat उपयोग कर सकते हैं

3

ब्राउज़र वास्तव में बाध्य नहीं हैं (का उपयोग करते हुए "netstat -एक बी" दिखाएगा जो निष्पादन योग्य ही है जो बंदरगाह के लिए) 80 पोर्ट करने के लिए बिल्कुल। आपको शायद यह पता चलेगा कि आप आईआईएस या अन्य वेब सर्वर भी चला रहे हैं जो बाध्य है और यह आपकी समस्याओं का कारण है

8

ब्राउज़र वास्तव में पोर्ट 80 पर नहीं सुनते हैं। वेब-सर्वर यह और ब्राउज़र करते हैं 49152 और 65535 के बीच एक बंदरगाह के साथ एक कनेक्शन खोलता है मुझे लगता है (गतिशील बंदरगाहों)।

4

नेटवर्क कनेक्शन में एक पीयर (आमतौर पर क्लाइंट कहा जाता है) जो दूसरे से कनेक्ट होता है (आमतौर पर सर्वर कहा जाता है)। सर्वर को एक निश्चित बंदरगाह पर सुनना कहा जाता है, जबकि ग्राहक उस बंदरगाह से जुड़ने के लिए कहा जाता है।

इस मामले में वेब सर्वर पोर्ट 80 पर सुनता है जबकि सभी क्लाइंट (ब्राउज़र) इससे जुड़ते हैं।

2

जब कोई ब्राउज़र किसी सर्वर से कनेक्शन बनाता है, तो यह स्थानीय गैर-निजीकृत बंदरगाह से जुड़ा होता है, लेकिन वेब सर्वर के पोर्ट 80 से कनेक्ट होता है। जब सर्वर प्रतिक्रिया वापस भेजता है, तो यह गैर-निजीकृत बंदरगाह पर जाता है ब्राउज़र का कंप्यूटर। यदि एक ही कंप्यूटर पर दो ब्राउज़र हैं, तो वे अलग-अलग बंदरगाहों से जुड़ते हैं।

0

यदि आप मतलब है "कैसे कर सकते हैं दो सर्वर पोर्ट 80 पर सुनने", HTTP सर्वर एपीआई का उपयोग पर विचार करें। दोनों सर्वर एक यूआरएल के साथ एक कॉलबैक फ़ंक्शन पंजीकृत कर सकते हैं। ग्राहक तब तय कर सकता है कि यूआरएल के आधार पर किस सर्वर को कॉल करना है, f.e.

http://localhost/Service1 उस सेवा पर जायेगा जिसने अपने यूआरएल के रूप में "http://localhost/Service1" निर्दिष्ट किया है।

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