简体   繁体   English

从Node.js连接到UDP服务器

[英]Connecting to UDP server from Nodejs

I have written a UDP server in C, and I am trying to connect to it from nodejs using the following client code: 我已经用C语言编写了一个UDP服务器,并且尝试使用以下客户端代码从nodejs连接到它:

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

server.on('error', (err) => {
  console.log(`server error:\n${err.stack}`);
  server.close();
});

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

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

server.bind(3000);

The server is also running on port 3000, and I am getting this error when I execute the nodejs code: 服务器也在端口3000上运行,执行nodejs代码时出现此错误:

client error:
Error: bind EADDRINUSE 0.0.0.0:3000
    at state.handle.lookup (dgram.js:242:18)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:745:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3

Why is this happening? 为什么会这样呢?

Thank you 谢谢

Maybe you could try the following code, this will create a UDP client and send a message to your server, I'm assuming it's on localhost , port 3000. 也许您可以尝试以下代码,这将创建一个UDP客户端并将一条消息发送到您的服务器,我假设它位于localhost,端口3000上。

It will also print any response: 它还将打印任何响应:

client.js: client.js:

const dgram = require("dgram");
const PORT = 3000;
const HOST = '127.0.0.1';

const message = Buffer.from("Hey there!!", "utf8");

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

client.on("message", function (message, remote) {
    console.log(`UDP message received from: ${remote.address}:${remote.port} - ${message}`);
});

client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
    if (err) {
        console.error(`UDP message send error:`, err);
    } else {
        console.log(`UDP message sent to ${HOST}:${PORT}`);
    }
});

You can try testing with a Node.js server if you wish as well, here is some adapted code from the Node.js docs: 如果愿意,也可以尝试使用Node.js服务器进行测试,这是来自Node.js文档的一些经过修改的代码:

server.js: server.js:

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

server.on('error', (err) => {
    console.log(`server error:`, err);
    server.close();
});

server.on('message', (msg, rinfo) => {
    console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
    // Echo message back to client
    server.send("I got a message from you: " + msg, rinfo.port);
});

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

server.bind(3000);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM