php - HTML5 Websocket 仅适用于本地主机

标签 php html ip-address localhost websocket

我遵循了以下网站的 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/

相关文章:

Haskell 将套接字绑定(bind)到特定 IP

php - 在 Date() 上加一星期

php - 如何在二维数组中不重复值的情况下在另一个循环内创建一个循环

javascript - 具有自动完成功能的 HTML/CSS/jQuery 编辑器

html+css,在没有表格的ul旁边放一个按钮

c# - 给定 IP 地址和子网掩码,如何计算 CIDR?

ruby-on-rails - ruby rails : How to Get the Client IP Address

PHP Echo 不使用 SQL 返回表数据

php - 使用 PHP 将下拉列表中的值存储到数据库

html - 溢出滚动已 overflow hidden