【问题标题】:Failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED失败:连接建立错误:net::ERR_CONNECTION_REFUSED
【发布时间】:2015-05-02 05:09:07
【问题描述】:

我尝试通过套接字连接到我的服务器。 我的服务器在端口 8080 上运行带有 Rachet 的服务器套接字。 我尝试运行这段代码:

<script>   

    try{
    conn = new WebSocket('wss://localhost:8080');


conn.onclose = function (e)
{
        //checkUser();
}

conn.onopen = function(e) 
{
    console.log("test");
};

    }catch (error)
{
    console.log(error);
}

  </script>

但我收到此错误:

WebSocket connection to 'wss://localhost:8080/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

当我尝试从我的 linux shell 连接时,我得到了这个:

root@(none):~# telnet localhost 8080
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

【问题讨论】:

  • 您的 Ratchet 安装是否配置为支持安全连接 (wss:)?您的密钥对和证书是否正确安装?另请注意,WebSocket 客户端不接受自签名证书;它必须由受信任的 CA 签名。您的服务器接受连接这一事实并不意味着它已正确设置为接受 secure 连接。无法接受安全连接是服务器故障;为了获得帮助,您需要提供有关如何设置 Ratchet 安装的更多信息。 (或者,根本不使用安全连接。)
  • 你检查过服务器的防火墙设置了吗?

标签: javascript sockets ssl websocket ratchet


【解决方案1】:

CONNECTION_REFUSED 在端口关闭时是标准的,但它可能会因为 SSL 身份验证失败(十亿个原因之一)而被拒绝。您是否使用 Ratchet 配置了 SSL? (绕过 Apache)你试过在 JavaScript 中不使用 SSL 吗?

我认为 Ratchet 没有内置对 SSL 的支持。但即使是这样,您也需要先尝试 ws:// 协议;它更简单,更容易调试,更接近 telnet。如果服务不支持 SSL(因为您明确请求了 SSL),Chrome 或套接字服务也可能会生成 REFUSED 错误。

但是,被拒绝的消息很可能是服务器端问题(通常是端口关闭)。

【讨论】:

    【解决方案2】:

    首先,我会尝试一个不安全的 websocket 连接。所以从连接地址中删除s 之一:

    conn = new WebSocket('ws://localhost:8080');
    

    如果这不起作用,那么我接下来要检查的是您服务器的防火墙设置。您需要在TCP_INTCP_OUT 中打开端口8080

    【讨论】:

    • 在 TCP_IN 和 TCP_OUT 中打开 8080 端口的位置。
    • 我通过在我的防火墙和调制解调器的防火墙中打开端口解决了这个问题。
    • 没有人能简单地告诉您如何在防火墙中打开端口。这取决于您的操作系统以及您拥有的任何独特的软件或硬件。尝试用strength: 1337 爆破谷歌。
    【解决方案3】:

    就我而言,答案很简单。 请仔细检查硬编码的 url 端口:它是 8080。 由于某种原因,该值已更改为:例如 3030。

    只需将 ajax url 字符串中的端口刷新为适当的端口即可。

    conn = new WebSocket('ws://localhost:3030'); //should solve the issue
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题 - 客户端脚本在 Windows 10 的浏览器中运行,websocket 服务器在 WSL 2 上运行(nodejs 应用程序使用 WebSocketServer package)。

      只有localhost 或 IPv6 localhost [::1] 变体(使用localhost 时浏览器最终会解析到该变体)实际上会正确连接到 WSL 2,从而正确连接到 nodejs websocket 服务器应用程序。 IPv4 127.0.0.1 localhost 在这种情况下将不起作用(Connection refused)。

      您可以在浏览器 (Chrome) 中检查自己:当您请求 websocket 地址时,许多实现会以 Upgrade Required 响应。

      【讨论】:

        【解决方案5】:

        您可以使用npm i y-websockets-server,然后使用以下命令

        y-websockets-server --port 11000
        

        在我的例子中,端口号是 11000。

        【讨论】:

          猜你喜欢
          • 2017-11-18
          • 2016-01-29
          • 1970-01-01
          • 2015-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-30
          相关资源
          最近更新 更多