我遵循了以下网站的 HTML5 Websocket 教程:
http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
它运行良好,然后我在客户端页面中将主机值从“localhost:8080”更改为“218.175.192.160:8080”(我的 ip),服务器端仍然保留“localhost:8080”。
原来我可以使用http协议(protocol)在浏览器(apache)中查看页面,例如“http://218.175.192.160:8080/client.html”,但是,客户端的套接字无法连接到“ws://218.175.192.160: 8080/daemon.php”。(编辑错字)
我的问题是: 1. 在客户端,为什么 websocket 只适用于“ws://localhost:8080/daemon.php”,而不适用于“ws://218.175.192.160:8080/daemon.php”?
2。 为什么 socket_bind( $socket, "127.0.0.1", 8080 ) 有效, 但是 socket_bind( $socket, "218.175.192.160", 8080 ) 发生错误? 系统提示“无法绑定(bind)地址[0]:请求的地址在其上下文中无效”。我确定该 IP 地址属于我的服务器。
请帮忙,谢谢。
我找到了错误的原因:绑定(bind)错误的地址,因为我使用了路由器,即使我在路由器上设置了NAT服务,但我忘记了“218.175.192.160”的地址属于路由器的接口(interface),不是我的服务器机器。
服务器机器的地址应该是本地地址类型,例如:“192.168.1.2”,这是真正在网卡接口(interface)上。
抱歉我忘记了基本的网络设置:(,希望这篇文章对像我这样的网络新手有帮助,thx~ :)
最佳答案
我相信同源策略适用于 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
关于php - HTML5 Websocket 仅适用于本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488943/