Web浏览器无法在Google Chrome上运行

我在PHP中有一个绑定到端口并侦听套接字的服务器。 我的服务器在PHP脚本中启动:</ p>

  $ socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); 
socket_set_option($ socket,SOL_SOCKET,SO_REUSEADDR,1); \ nsocket_bind($ socket,0,$ port);
</ code> </ pre>

然后它监听端口:</ p>

  socket_listen  ($ socket); 
</ code> </ pre>

当HTTP消息从客户端到达时,服务器会读取标头:</ p>

  $ header = socket_read($ socket_new,1024); 
</ code> </ pre>

然后将连接存储在Memcache存储中。 这适用于大多数浏览器,包括safari,firefox和Chrome的Canary。 但是,它不适用于chrome。 浏览器抛出一条错误消息:</ p>


WebSocket连接到'ws://xyz.com:9001 / chat_server.php'
失败:WebSocket握手期间出错: 不正确
'Sec-WebSocket-Accept'标题值</ p>
</ blockquote>

我的Chrome版本为:版本38.0.2125.111 m(64位)</ p> \ n </ div>

展开原文

原文

I have a server in PHP which binds to a port and listens to sockets. My server is started in a PHP script with:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, 0, $port);

It then listens to the port:

socket_listen($socket);

When a HTTP message arrives from the client, the server reads the header:

$header = socket_read($socket_new,1024);

and then stores the connection in a Memcache storage. This works for most browsers including safari, firefox and Chrome's Canary. However, it doesn't work on chrome. The browser throws an error message:

WebSocket connection to 'ws://xyz.com:9001/chat_server.php' failed: Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value

My version of Chrome is: Version 38.0.2125.111 m (64-bit)

1个回答



我们遇到了同样的问题,我们可以通过增加socket_read()函数中的“最大字节数”参数来解决它。 您可以尝试</ p>

  socket_tead($ socket_new,2048); 
</ code> </ pre>

原因是chromeocket中的websocket标头 有时大于1024字节。 因此,当您的服务器读取1024个字节时,它不会获得Sec-Websocket-Key参数,并且它无法生成有效的Sec-Websocket-Accept值。 </ p>

您也可以使用fsockopen()和fread()代替socket_read()函数。 </ p>
</ div>

展开原文

原文

We had the same issue and we could solve it by increasing the "maximum number of bytes" parameter in the socket_read() function. You can try

socket_tead($socket_new, 2048);

The reason is that websocket header in chrome sometimes is greater that 1024 bytes. So, when your server reads 1024 bytes, it does not get Sec-Websocket-Key parameter and it can not generate valid Sec-Websocket-Accept value.

You can also use fsockopen() and fread() instead of socket_read() function.

drxpt06820
drxpt06820 在我的情况下,最大。 字节数= 5000工作。 socket_read($ socket_new,5000);
接近 3 年之前 回复
douqu2481
douqu2481 感谢您的建议。 它现在有效!!
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问