【问题标题】:Why is connection refused when trying to establish a web-socket?为什么尝试建立网络套接字时连接被拒绝?
【发布时间】:2019-10-19 14:12:38
【问题描述】:

我正在尝试在 java 脚本客户端和 php 服务器之间建立 web-socket 连接。但是,每当我尝试连接时,都会收到错误“连接被拒绝”。

我已经能够在两个 php 脚本之间创建 web-socket 连接,这让我认为服务器端代码是正确的。

请解释我如何解决这个问题。

服务器(PHP):

$host = "108.167.140.91";
$port = 5353;
set_time_limit(30);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 20);

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");

socket_write($spawn, "connected", strlen ("connected"));

// close sockets
socket_close($spawn);
socket_close($socket);

客户端(HTML):

<html>
<script>
var socket = new WebSocket("ws://108.167.140.91:5353");

// Open the socket
socket.onopen = function(event) {
    console.log("connected");

    // To close the socket....
    socket.close()

};
</script>
</html>

您可以在这里自行测试:

服务器:http://chrislanggames.site/SocketTest/server3.php

客户:http://chrislanggames.site/SocketTest/client2.html

工作 PHP 客户端:http://chrislanggames.site/SocketTest/client.php

【问题讨论】:

  • 您的 PHP 服务器是否允许从服务器外部通过端口 5353 进行连接。
  • 我不确定。我尝试了多个不同的端口。如何检查是否允许连接?
  • 用telnet试试看能不能连上telnet 108.167.140.91 5353
  • Telnet 无法打开连接。这可能与我服务器上的防火墙有关吗?如果是这样,我怎样才能将端口列入白名单?

标签: javascript php websocket


【解决方案1】:

尝试将主机更改为“0.0.0.0” .... 这意味着它可以接受来自任何主机的套接字连接请求。

【讨论】:

  • 我这只是将服务器中的主机变量更改为“0.0.0.0”吗?因为如果是这样,它仍然不起作用。澄清一下,客户端代码应该保持不变。对吗?
  • 客户端代码应该保持不变。有时,如果服务器正在侦听特定 IP,它会限制它可以接受的套接字连接。因此切换到 0.0.0.0 .... 这意味着从任何主机接受。但这不能解决您的问题,可能是另一个问题。
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2019-10-20
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多