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);
一个问题就是,如何实现广域网通讯呢? 如果两台机器在不同的局域网内,如何通讯呢?
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);
运行步骤
- 在一台机器上运行服务器代码:
node server.js
- 在另一台机器上运行客户端代码:
node client.js
解释
-
服务器代码:
- 创建一个 UDP 服务器并绑定到指定的 IP 地址和端口(
192.168.1.58:3000
)。 - 监听
listening
事件以确认服务器已启动。 - 监听
message
事件来处理接收到的消息,并打印发送方的地址和消息内容。
- 创建一个 UDP 服务器并绑定到指定的 IP 地址和端口(
-
客户端代码:
- 创建一个 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 地址和端口
运行步骤
-
在接收端机器上运行
receiver.js
:node receiver.js
-
在发送端机器上运行
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 通信。