【问题标题】:Connecting to UDP server from Nodejs从 Nodejs 连接到 UDP 服务器
【发布时间】:2019-12-28 12:46:19
【问题描述】:

我已经用 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);

服务器也在 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

为什么会这样?

谢谢

【问题讨论】:

    标签: node.js sockets udp


    【解决方案1】:

    也许您可以尝试以下代码,这将创建一个 UDP 客户端并向您的服务器发送一条消息,我假设它位于 localhost 的 3000 端口。

    它还会打印任何响应:

    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}`);
        }
    });
    

    如果您愿意,也可以尝试使用 Node.js 服务器进行测试,这里有一些来自 Node.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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2012-03-27
      • 2023-03-19
      • 2018-11-24
      相关资源
      最近更新 更多