2010-08-15 16 views
13

पर काम करता है मैं पीछा नीचे वेबसाइट के एचटीएमएल 5 WebSocket ट्यूटोरियल: ": 8080 स्थानीय होस्ट" के लिए "218.175.192.160एचटीएमएल 5 WebSocket केवल स्थानीय होस्ट

http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

यह अच्छी तरह से काम किया, तो मैं से मेजबान मूल्य बदल : 8080 "(मेरा आईपी) क्लाइंट-साइड पेज में, सर्वर पक्ष अभी भी" लोकलहोस्ट: 8080 "रखा गया है।

यह पता चला है कि मैं http प्रोटोकॉल के साथ ब्राउज़र (अपाचे) में पृष्ठ देख सकता हूं, उदाहरण के लिए, "http://218.175.192.160:8080/client.html" हालांकि, क्लाइंट-साइड में सॉकेट "ws: //218.175.192.160: 8080 से कनेक्ट नहीं हो सकता /daemon.php".(editted टाइपो)

मेरे सवालों

हैं: 1. ग्राहक के पक्ष में , क्यों केवल WebSocket "ws: // स्थानीय होस्ट: 8080/daemon.php" पर काम करता है, न कि "ws: //218.175.192.160:8080/daemon.php "?

2. क्यों socket_bind ($ सॉकेट, "127.0.0.1", 8080) में काम करता है, लेकिन socket_bind ($ सॉकेट, "218.175.192.160", 8080) त्रुटि तब? सिस्टम याद दिलाता है "पता बाध्य करने में असमर्थ [0]: अनुरोधित पता इसके संदर्भ में मान्य नहीं है"। मुझे यकीन है कि आईपी पता मेरे सर्वर से संबंधित है।

कृपया मदद करें, धन्यवाद।

मुझे त्रुटि का कारण पता चला: गलत पता बाध्यकारी, क्योंकि मैंने राउटर का उपयोग किया था, भले ही मैंने राउटर पर एनएटी सेवा सेट की थी, लेकिन मैं "218.175.192.160" का पता भूल गया था राउटर का इंटरफ़ेस, मेरी सर्वर मशीन नहीं।

सर्वर मशीन का पता स्थानीय पता प्रकार होना चाहिए, उदाहरण के लिए: "192.168.1.2", जो वास्तव में लैन कार्ड इंटरफ़ेस पर है।

खेद है कि मैं बुनियादी नेटवर्क सेटिंग :(भूल गया, उम्मीद है कि इस पोस्ट मेरे जैसे नेटवर्क नौसिखिया मदद करता है, THX ~ :)

+0

यह संभव है कि आपका राउटर कैसे स्थापित किया जाए, न कि वेबसाइकिल स्वयं। आपके उत्तर के लिए –

+0

thx, लेकिन मेरा सर्वर सामान्य रूप से http प्रोटोकॉल चला सकता है, मेरा मतलब है कि अन्य क्लाइंट मेरी वेबसाइट पढ़ सकते हैं, क्या यह एक तर्क है कि मेरे राउटर में कोई समस्या नहीं है? कम से कम एनएटी सेटिंग पर ... – ssac

+0

कृपया इसे अपने लिए बंद करें। – bmargulies

उत्तर

1

मुझे यह समस्या भी थी।

समस्या यह है कि आप अपने राउटर के आईपी पते का जिक्र कर रहे हैं। आपको अपने कंप्यूटर के आईपी पते का संदर्भ देने की आवश्यकता है।

यह स्थानीयहोस्ट के लिए काम करता है क्योंकि स्थानीयहोस्ट आपके व्यक्तिगत कंप्यूटर पर इंगित करता है न कि आपके राउटर।

2

मेरा मानना ​​है कि एक ही मूल नीति दोनों WebSockets और सर्वर बंदरगाहों पर लागू होता है, इसलिए क्लाइंट और सर्वर दोनों से मेल खाना पड़ेगा या अन्यथा कनेक्शन विफल हो जाएगा।

अपने उदाहरण में, आप का इस्तेमाल किया:

http://218.175.192.160:8080/client.html 
ws://218.175.192.160/daemon.php 

मैं अगर यह सिर्फ एक टाइपो था यकीन नहीं है, लेकिन यह अवश्य होना चाहिए कि

http://218.175.192.160:8080/client.html 
ws://218.175.192.160:8080/daemon.php 
+0

thx, हाँ, मैंने एक टाइपो बनाया है, मेरी कॉन्फ़िगरेशन बाद की तरह है, लेकिन काम नहीं किया ... – ssac

+0

यह सच नहीं है। उसी पोर्ट को चलाने के लिए क्लाइंट और सर्वर की कोई आवश्यकता नहीं है। –

1

आप अभी भी उपयोग 'स्थानीय होस्ट' क्या अपने PHP सर्वर इस तरह ?: प्रारंभ करने में

public function __construct($host='localhost',$port=8000,$max=100) 

आप ऐसा करते हैं तो सर्वर केवल स्थानीय होस्ट क ¥ करने के लिए बाध्य होगा rface। भले ही आप अपाचे से फ़ाइल को सही तरीके से सेवा दे रहे हों, ऐसा लगता है कि phpwebsockets कोड को अभी भी बाहरी आईपी के लिए कॉन्फ़िगर करने की आवश्यकता है।

+0

अगर मैं इस तरह के इंटरफ़ेस को बांधता हूं, तो यह त्रुटि उत्पन्न करता है ... इस तरह से कुछ भी गलत है? ssac

1

socket_bind($socket, "127.0.0.1", 8080) के बजाय, जो इसे केवल localhost से अनुरोधों को अनुमति देने के लिए कहता है, '0.0.0.0' से जुड़ें जो किसी भी आईपी से अनुरोधों की अनुमति देता है।

तो इसे socket_bind($socket, "0.0.0.0", 8080) बनाएं और यह काम करेगा।