ERR_CONNECTION_REFUSED http://localhost:3000/socket.io/socket.io.js 连接被拒绝:http://localhost:3000/socket.io/socket.io.js

5

你好,我正在实现一个WebRTC多对多视频会议系统,目前已经完成了,我使用socket.IO作为信令服务器,所有一切都很顺利。我使用EnterpriseDB Apache在端口(8081)上提供我的.html文件,并使用Node.js在端口(3000)上提供socket.IO。在本地主机中运行得非常好,没有错误。我的问题是如何通过公共IP地址进行外部访问测试,我正在使用以下浏览器服务测试:www.browserstack.com和www.browserling.com(试用版本)。

  • 使用www.browserstack.com时,Mozilla 42或Chrome 47均能正常工作

  • 使用www.browserling.com时,我遇到了以下错误

    Firefox 41: ReferenceError: io未定义

    Chrome 45: 无法加载资源 http://localhost:3000/socket.io/socket.io.js net::ERR_CONNECTION_REFUSED Uncaught ReferenceError: io未定义

  • 我的朋友也遇到了与www.browserling.com相同的问题,但他们使用的是最新版本的浏览器(Chrome 47和Firefox 42)连接到我的PC服务器。

我认为这不是浏览器版本问题,而是socket.io.js文件的服务问题。最后,这是我的代码:

为了解决这个问题,它只显示了重要的内容:

///NODE.JS DIRECTORY
////////////////////serverside.js
var port = 3000;
var io = require('socket.io').listen(port);
io.sockets.on('connection', function (socket){.........}


///APACHE DIRECTORY
////////////////////clientside.js 
//Connect to signalling server   
var socket = io.connect("http://localhost:3000");

////////////////////avq.html
<!DOCTYPE html>

<html lang="es">

    <head><meta charset="UTF-8">
    </head> 
    <body>
        <script src="http://localhost:3000/socket.io/socket.io.js"></script>
        <script src="js/clientside.js"></script>
    </body>
</html>

这是我的服务器URL,如果有人想尝试,请访问: http://201.209.104.33:8081/webrtcexamples/avq.html
2个回答

9
localhost 是一个特殊的主机名,它指向请求它的计算机本身。因此,任何使用与您不同的计算机且尝试连接到 localhost 的人将会尝试连接到自己的计算机,而非您的计算机。由于服务器并未运行在他们的计算机上,他们显然会收到“连接被拒绝”的错误信息。

您需要用一个全局可访问的地址(域名或IP地址)替换 localhost 。这意味着您需要使您的路由器将外部IP地址映射到运行服务器的计算机的端口(否则他们将连接到您的路由器,而非您的服务器)。


不,我认为这不是问题,我在网上看到了很多代码,许多人都使用文件socket.io.js进行操作,但我不能使用动态公共IP连接到自己的机器。如果我使用"http://201.209.104.33:3000/socket.io/socket.io.js",它不能在我的机器上正常工作。 - Jose Ricardo Citerio Alcala
3
@user4216713,我告诉你这绝对是问题所在。localhost 绝对是指当前本地计算机,由使用该地址的人所看到。没有人可以使用 localhost 连接到你的计算机。 - jcaron
如前所述,您还需要配置路由器,以便将对端口3000的连接转发到您的计算机。 - jcaron
为什么它在www.browserstack.com上能够工作?我不理解。 - Jose Ricardo Citerio Alcala
我不知道你测试了什么以及如何测试,但是如果你告诉远程浏览器连接到本地主机,那么它肯定没有连接到你的计算机。 - jcaron
显示剩余4条评论

3

尝试使用 io.connect("http://201.209.104.33:3000"); 代替 io.connect("http://localhost:3000");

编辑

您需要在使用它的服务器上运行套接字。因此,如果您在自己的计算机上运行它,则您朋友的计算机将无法看到它,因为当它连接到 localhost 时,它会尝试连接到他们计算机的 localhost,而不是你的。

我以前也遇到过同样的问题。您需要从服务器上运行它,以便每个人都可以连接到它。


不行,我做不到这个,这个公共IP地址201.209.104.33是动态的,如果我尝试从自己的电脑连接,它是无法工作的,你不能在自己的机器上使用公共IP地址。 - Jose Ricardo Citerio Alcala
1
@user4216713 那么你需要获取实际的托管服务或动态DNS。 - Daedalus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接