15

我遵循了以下网站的 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 协议在浏览器(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 ) 出现错误?系统提示“无法绑定地址[0]:请求的地址在其上下文中无效”。我确定 IP 地址属于我的服务器。

请帮忙,谢谢。

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

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

对不起,我忘记了基本的网络设置:(,希望这篇文章能帮助像我这样的网络新手,谢谢~ :)

4

4 回答 4

2

而不是socket_bind( $socket, "127.0.0.1", 8080 )告诉它只允许来自 的请求localhost,绑定到允许来自任何 IP 的请求的“0.0.0.0”。

所以做它socket_bind( $socket, "0.0.0.0", 8080 ),它会工作的。

于 2013-04-26T03:12:54.403 回答
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
于 2010-08-15T21:20:09.303 回答
1

你还在用'localhost'这样初始化你的PHP服务器吗?:

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

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

于 2010-08-16T00:26:45.183 回答
1

我也有这个问题。

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

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

于 2010-08-25T16:46:15.213 回答