I followed the HTML5 Websocket tutorial of the website below:
http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
It worked well, then I changed the host value from "localhost:8080" to "218.175.192.160:8080" (my ip) in client-side page, the server side still kept "localhost:8080".
It turns out that I can view the page in browser(apache) with http protocol, for example "http://218.175.192.160:8080/client.html", however, the socket in client-side can not connect to "ws://218.175.192.160:8080/daemon.php".(editted typo)
my questions are: 1. in client side, why does websocket only work on "ws://localhost:8080/daemon.php", not "ws://218.175.192.160:8080/daemon.php"?
2. why socket_bind( $socket, "127.0.0.1", 8080 ) works, but socket_bind( $socket, "218.175.192.160", 8080 ) occur error? the system reminds "unable to bind address [0]: The requested address is not valid in its context". I am sure that the Ip address belongs to my server.
Please help, Thank you.
I had found out the reason of the error: binding the wrong address, becasue i used router, even though i had set NAT service on router, but i forgot the address of "218.175.192.160" is belonging to the interface of router, not my server machine.
the address of server machine should be the local address type, for example: "192.168.1.2", which is really on the lan card interface.
sorry that i forgot the basic network setting :( , hope this post helps the network newbie like me, thx~ :)
It works for localhost because localhost points to your individual computer and not your router. Save this answer.
WebSockets is a next-generation bidirectional communication technology for web applications which operates over a single socket and is exposed via a JavaScript interface in HTML 5 compliant browsers.
The WebSocket protocol enables interaction between a web browser (or other client application) and a web server with lower overhead than half-duplex alternatives such as HTTP polling, facilitating real-time data transfer from and to the server.
It has built-in means of detecting transmission errors or packet corruption and attempting retransmissions in those cases, but delivery can still fail. It guarantees that if the packet is not delivered, the caller will get an error so the caller can know. Since websocket is built on top of TCP, it has the same issue.
I believe the same origin policy applies to both websockets and server ports, so both client and server have to match or else the connection will fail.
In your example, you used:
http://218.175.192.160:8080/client.html
ws://218.175.192.160/daemon.php
I'm not sure if it was just a typo, but this would need to be
http://218.175.192.160:8080/client.html
ws://218.175.192.160:8080/daemon.php
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With