首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许公网IP通过WebSockets连接

允许公网IP通过WebSockets连接
EN

Stack Overflow用户
提问于 2014-02-24 12:29:16
回答 2查看 6.8K关注 0票数 7

我试着用nodejs ws (einaros)创建一个聊天,这是我的代码:

服务器:

代码语言:javascript
复制
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 80 });
wss.on('connection', function(ws) {
    console.log('connecting count:' + wss.clients.length);
});

客户端:

代码语言:javascript
复制
var hostname = location.hostname;
var port = 80;
var url = 'ws://'+hostname+':'+port+'/';
window.WebSocket = window.WebSocket || window.MozWebSocket;
var w = new WebSocket(url);

当我用我的计算机或与我的路由器连接的其他计算机进行测试时,它工作正常。但是,通过Internet访问的其他客户端无法进行连接。当然,他们使用的是公网IP,比如218.xxx.xxx.xxx,而不是192.168.xxx.xxx。

我想知道如何解决这个问题。

谢谢你的回答。但是,这可能不是NAT问题。例如,我的公网IP为218.100.50.50,内网Ip为192.168.1.1。当连接来自我的网络外部并访问218.100.50.50:80时,路由器会将其重定向到192.168.1.1:80。有一个网页可以通过这种方式访问,但仍然无法连接到我的websocket服务器。这个问题真的把我搞糊涂了。

EN

回答 2

Stack Overflow用户

发布于 2014-02-24 19:09:05

在路由器后面安装IPv4会导致将实际流量路由到正确方向(路由器后面的计算机)时出现问题。

您需要将路由器设置中的端口80转发到您的计算机IP。此外,我建议在路由器设置中为您的计算机设置首选IP,以便在重启后更有可能不会更改本地IP地址(否则可能会发生)。

在这些更改之后,您甚至可以尝试在自己的计算机上使用公共IP进行连接,如果它可以工作-那么它应该可以从外部计算机工作。

此外,请检查防火墙设置,以确保它不会阻止任何到端口80的外部通信。

票数 4
EN

Stack Overflow用户

发布于 2014-02-24 21:01:36

您的问题称为NAT:http://en.wikipedia.org/wiki/Network_address_translation

当连接来自您的网络外部(即,针对您的公共IP)时,路由器不知道谁将接收该连接。想象一下,有3台PC和2部智能手机连接到你的路由器上,哪一个会“回答”?那么,您需要做的是告诉路由器:“亲爱的路由器,当我的朋友尝试连接端口80时,请将它们重定向到设备192.168.1.37和端口80 (例如)”。

如果您不想一次又一次地重新配置您的路由器以更新192.168.1.37 (由于DHCP随机IP分配),则告诉您的路由器始终为您的PC分配相同的IP (静态ip)。

因此,请为您的PC配置静态IP,并为端口80创建端口转发规则,将流量重定向到您的服务器。你可以搜索“路由器配置后的服务器”来获取更多的详细信息,有成千上万的教程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21978903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档