Nodejs 局域网内的udp通讯代码

Nodejs 局域网内的udp通讯代码

这一端是局域网两台机器UDP通讯的源码,本人测试的是windows xp和win7之间。 脚本保存为app.js文件,保存到node目录下,dos切换到nodejs目录下,执行node app.js,便可看到效果。

var PORT = 3000; var HOST = ‘192.168.1.58’;

var dgram = require(‘dgram’); var udp4 = dgram.createSocket(‘udp4’);

udp4.on(‘listening’, function () { var address = udp4.address(); console.log('UDP Server listening on ’ + address.address + “:” + address.port); console.log(address); });

udp4.on(‘message’, function (message, remote) { console.log(remote.address + ‘:’ + remote.port +’ - ’ + message);

});

udp4.bind(PORT, HOST);

setInterval(function() { var HOST=“192.168.1.16”; var PORT=“3000”; var message = new Buffer(‘My KungFu is Good!—’+Math.random()); udp4.send(message, 0, message.length, PORT, HOST, function(err, bytes) { if (err) throw err; console.log(‘UDP message sent to ’ + HOST +’:’+ PORT); //client.close(); }); },3000);

一个问题就是,如何实现广域网通讯呢? 如果两台机器在不同的局域网内,如何通讯呢?


6 回复

Node.js 局域网内的 UDP 通信代码

介绍

在本教程中,我们将使用 Node.js 实现局域网内两台机器之间的 UDP 通信。示例代码将展示如何创建一个 UDP 服务器和客户端,并实现在不同机器上的数据交换。

示例代码

首先,我们需要安装 Node.js 并确保已经安装了 dgram 模块。dgram 是 Node.js 的内置模块,用于处理 UDP 通信。

UDP 服务器代码 (server.js)
const dgram = require('dgram');
const PORT = 3000;
const HOST = '192.168.1.58';

const server = dgram.createSocket('udp4');

server.on('listening', () => {
    const address = server.address();
    console.log(`UDP Server listening on ${address.address}:${address.port}`);
});

server.on('message', (message, remote) => {
    console.log(`${remote.address}:${remote.port} - ${message.toString()}`);
});

server.bind(PORT, HOST);
UDP 客户端代码 (client.js)
const dgram = require('dgram');
const PORT = 3000;
const HOST = '192.168.1.58';

const client = dgram.createSocket('udp4');

setInterval(() => {
    const message = Buffer.from(`My KungFu is Good! — ${Math.random()}`);
    client.send(message, PORT, HOST, (err) => {
        if (err) throw err;
        console.log(`UDP message sent to ${HOST}:${PORT}`);
    });
}, 3000);

运行步骤

  1. 在一台机器上运行服务器代码:
    node server.js
    
  2. 在另一台机器上运行客户端代码:
    node client.js
    

解释

  • 服务器代码:

    • 创建一个 UDP 服务器并绑定到指定的 IP 地址和端口(192.168.1.58:3000)。
    • 监听 listening 事件以确认服务器已启动。
    • 监听 message 事件来处理接收到的消息,并打印发送方的地址和消息内容。
  • 客户端代码:

    • 创建一个 UDP 客户端。
    • 每隔 3 秒向服务器发送一条消息。
    • 使用 Buffer 来封装消息内容,并通过 send 方法发送给服务器。

广域网通信

如果两台机器位于不同的局域网内,则需要进行端口转发或使用公共 IP 地址。具体操作可以参考路由器的文档,配置端口转发规则,将外部请求转发到内部服务器的 IP 地址和端口。

希望以上代码和解释能帮助你理解 Node.js 中 UDP 通信的基本原理和实现方法。


如果在两个局域网内实现通信的话,可以自己实现UDP"打洞"。

@ showen ,请教您是如何实现呢?

你搜一下嘛 这个和具体的语言没有关系的

好像懂了,不过需要一台公网服务器才能测试的。 不好弄公网服务器的~~

为了实现局域网内的 UDP 通信,你可以使用 Node.js 的 dgram 模块。以下是一个简单的示例代码,展示了如何在局域网内的两台机器上实现 UDP 通信。

发送端代码 (sender.js)

const dgram = require('dgram');
const message = new Buffer('Hello from Sender');

const client = dgram.createSocket('udp4');

const host = '192.168.1.58'; // 接收方的 IP 地址
const port = 3000;          // 接收方的端口号

client.send(message, 0, message.length, port, host, (err) => {
    if (err) throw err;
    console.log('Message sent to the server.');
});

client.close();

接收端代码 (receiver.js)

const dgram = require('dgram');
const message = new Buffer('');

const server = dgram.createSocket('udp4');

server.on('listening', () => {
    const address = server.address();
    console.log(`Server listening on ${address.address}:${address.port}`);
});

server.on('message', (msg, rinfo) => {
    console.log(`Received message: ${msg.toString()} from ${rinfo.address}:${rinfo.port}`);
});

server.bind(3000, '192.168.1.58'); // 绑定本地 IP 地址和端口

运行步骤

  1. 在接收端机器上运行 receiver.js

    node receiver.js
    
  2. 在发送端机器上运行 sender.js

    node sender.js
    

代码解释

  • dgram.createSocket('udp4'):创建一个 UDP 套接字。
  • server.bind(port, ip):绑定套接字到指定的 IP 地址和端口。
  • client.send(buffer, offset, length, port, ip, callback):发送数据报。
  • server.on('message', callback):监听收到的消息,并打印来源信息。

广域网通讯

如果你需要在不同局域网内的机器之间进行 UDP 通信,通常需要通过端口转发或使用第三方服务(如 TURN 服务器)来解决 NAT 穿透问题。但这超出了这个示例的范围,你可以考虑使用专门的库或服务来实现广域网内的 UDP 通信。

回到顶部