Php HTML5 Websocket仅在本地主机上工作

Php HTML5 Websocket仅在本地主机上工作,php,html,ip-address,localhost,websocket,Php,Html,Ip Address,Localhost,Websocket,我遵循了以下网站的HTML5 Websocket教程: 它工作得很好,然后我在客户端页面中将主机值从“localhost:8080”更改为“218.175.192.160:8080”(我的ip),服务器端仍然保留“localhost:8080” 事实证明,我可以使用http协议在浏览器(apache)中查看页面,例如“”,但是客户端中的套接字无法连接到“ws://218.175.192.160:8080/daemon.php”。(编辑输入错误) 我的问题是: 1. 在客户端,为什么websoc

我遵循了以下网站的HTML5 Websocket教程:

它工作得很好,然后我在客户端页面中将主机值从“localhost:8080”更改为“218.175.192.160:8080”(我的ip),服务器端仍然保留“localhost:8080”

事实证明,我可以使用http协议在浏览器(apache)中查看页面,例如“”,但是客户端中的套接字无法连接到“ws://218.175.192.160:8080/daemon.php”。(编辑输入错误)

我的问题是: 1. 在客户端,为什么websocket只在“ws://localhost:8080/daemon.php”上工作,而不在“ws://218.175.192.160:8080/daemon.php”上工作

二,。 为什么socket_bind($socket,“127.0.0.1”,8080)有效, 但是套接字绑定($socket,“218.175.192.160”,8080)发生错误吗? 系统提示“无法绑定地址[0]:请求的地址在其上下文中无效”。我确信Ip地址属于我的服务器

请帮忙,谢谢

我发现了错误的原因:绑定了错误的地址,因为我使用了路由器,虽然我在路由器上设置了NAT服务,但我忘记了“218.175.192.160”的地址属于路由器的接口,而不是我的服务器机器。

服务器机器的地址应该是本地地址类型,例如:“192.168.1.2”,它实际上位于lan卡接口上。


很抱歉,我忘记了基本的网络设置:(,希望这篇文章能帮助像我这样的网络新手,thx~:)

我相信相同的来源策略适用于WebSocket和服务器端口,所以客户端和服务器都必须匹配,否则连接将失败

在您的示例中,您使用了:

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

您是否仍然使用“localhost”以这种方式初始化PHP服务器

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

如果您这样做,那么服务器将只绑定到localhost接口。即使您从Apache正确地提供文件,phpwebsockets代码仍然需要为外部IP配置。

我也遇到了这个问题

问题是,您很可能指的是路由器的IP地址。您需要做的是引用计算机的IP地址


它适用于localhost,因为localhost指向您的个人计算机,而不是路由器。

而不是
socket\u-bind($socket,“127.0.0.1”,8080)
,它告诉它只允许来自
localhost的请求,绑定到允许来自任何IP的请求的“0.0.0”


所以,让它
socket\u绑定($socket,“0.0.0.0”,8080)
它就会工作。

这可能是因为你的路由器是如何设置的,而不是websockets本身。thx对于你的回复,但我的服务器可以正常运行http协议,我的意思是其他客户端可以阅读我的网站,我的路由器没有问题,这是一种嫉妒吗?至少在NAT设置上…请自己关闭此项。如果您已经解决了问题,请回答您自己的问题,或删除该问题。回答或标记摩西的答案而不是编辑您的问题将更有帮助,IMO.thx对于您的回答,是的,我输入了一个错误,我的配置与后一个类似,但不起作用…那不是真的。客户端和服务器不需要在同一个端口上运行。如果我像这样绑定接口,它会出错…这样有什么问题吗?