关于别的电脑访问Nodejs建的服务器的问题

关于别的电脑访问Nodejs建的服务器的问题

我在自己电脑上搭建了nodejs+websocket环境,并且做了一个小应用,想在局域网内的其他电脑上访问到这个应用,怎么实现呢? 我尝试了一下,在别的电脑上的浏览器中国输入服务器的IP+端口号,但是不可以,正在思考问题出在哪了

11 回复

当然可以。为了帮助你解决这个问题,我们需要确保几个关键点:

  1. Node.js 服务已正确启动并监听正确的端口
  2. 防火墙设置允许外部访问该端口
  3. 局域网内的其他设备能够通过IP地址访问该服务器

以下是一个简单的示例代码,展示如何在 Node.js 中启动一个 WebSocket 服务器,并确保可以从局域网内的其他设备访问它。

示例代码

首先,你需要安装 ws 模块来处理 WebSocket 连接。你可以使用 npm 来安装:

npm install ws

然后创建一个简单的 Node.js 应用程序,用于启动 WebSocket 服务器:

const http = require('http');
const WebSocket = require('ws');

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('WebSocket Server');
});

// 创建 WebSocket 服务器
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  console.log('Client connected');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // 广播消息给所有连接的客户端
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  ws.on('close', () => {
    console.log('Client disconnected');
  });
});

server.listen(8080, '0.0.0.0', () => {
  console.log('Server is listening on port 8080');
});

关键点解释

  1. server.listen(8080, '0.0.0.0'):

    • 8080 是服务器监听的端口号。
    • '0.0.0.0' 表示服务器将监听所有网络接口(即任何 IP 地址)。这样局域网内的其他设备就可以通过你的电脑的 IP 地址访问这个服务器。
  2. 确保防火墙允许访问端口:

    • 如果你在 Windows 或 Linux 上运行这个服务器,确保防火墙设置允许外部访问 8080 端口。
  3. 局域网内的其他设备访问:

    • 在其他设备上打开浏览器,输入 http://<你的电脑IP>:8080。例如,如果你的电脑的 IP 地址是 192.168.1.100,则应该输入 http://192.168.1.100:8080

测试连接

  • 确保你的电脑和测试设备都在同一个局域网内。
  • 在浏览器中输入正确的 IP 地址和端口号。
  • 查看控制台日志确认 WebSocket 连接是否成功。

希望这些步骤能帮助你解决问题!


ping 一下,看能不能找到。

ip对吗,内网IP。

ping 过了的,是通的。访问的地址是192.168.1.133:3000,但是在浏览器中就是访问不到,很是奇怪啊

贴代码. websocket 监听端口是 0.0.0.0, 确认下.

linux?被防火墙阻止了?

找到原因了,之前在.listen中还有一个IP的参数,去掉就可以了 var server = http.createServer(function (req, res) { fs.readFile(’./index.html’, function(error, data) { res.writeHead(200, { ‘Content-Type’: ‘text/html’ }); res.end(data, ‘utf-8’); }); }).listen(3000);

server.listen(port, [hostname], [backlog], [callback]) 如果省略主机名,服务器会接收指向任意IPv4地址的链接 如果指定hostname是127.0.0.1的话,就只可以本机可以访问了

推荐一下 ngrok,可以把内网部署的网站导到外网上去,做测试,演示啥的很方便。

https://ngrok.com/ ./ngrok http [port number]

Screen Shot 2015-08-18 at 12.05.04 PM.png

// debug 为 true 时,用于本地调试 没设置成false,是不是跟这个有关系啊?我公网也访问不了 // redis 配置,默认是本地 redis_host: ‘127.0.0.1’, redis_port: 6379, redis_db: 0,

要在局域网内的其他电脑上访问你在本地电脑上搭建的Node.js服务器,你需要确保以下几个方面:

  1. Node.js服务器监听正确的IP地址: 默认情况下,Node.js服务器可能只监听localhost(即127.0.0.1),这只能被本机访问。你需要让服务器监听你的局域网IP地址。

  2. 防火墙设置: 确保你的防火墙允许外部设备通过指定端口访问你的服务器。

  3. 正确输入访问地址: 在局域网内的其他电脑上,你需要使用你的局域网IP地址加端口号来访问。

示例代码

假设你已经有一个简单的Node.js WebSocket服务器,可以参考以下修改后的代码:

const http = require('http');
const WebSocket = require('ws');

// 获取本机的局域网IP地址
const ip = require('ip'); // 需要安装 `npm install ip`
const localIP = ip.address();

const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('WebSocket Server is running');
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.on('message', (message) => {
    console.log(`Received: ${message}`);
  });
  ws.send('Hello, Client!');
});

server.listen(8080, localIP, () => {
  console.log(`Server running at http://${localIP}:8080/`);
});

解释

  1. 获取局域网IP地址: 使用ip库来获取当前机器的局域网IP地址。

  2. 监听特定IP地址和端口server.listen(8080, localIP) 让HTTP服务器监听指定的IP地址和端口(这里是8080)。

  3. 客户端访问: 在局域网内的其他电脑上,你可以通过浏览器访问 http://<你的局域网IP>:8080 来访问你的Node.js服务器。

其他注意事项

  • 确保防火墙设置允许外部设备访问该端口。
  • 如果你的网络环境有路由器,确保端口转发配置正确,这样外部网络也可以访问到你的服务器。

通过以上步骤,你应该能够在局域网内其他电脑上成功访问到你的Node.js WebSocket服务器。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!