繁体   English   中英

在Express中侦听UDP消息

[英]Listen for UDP messages in Express

我有一个使用Express的基本Node.js服务器。 它需要能够处理TCP消息和UDP消息。 TCP部分运行良好,但是现在我需要集成一种嗅探UDP消息的方法。 我尝试使用dgram套接字将处理程序添加到过滤器堆栈中,但没有成功。

const express = require('express');
const dgram = require('dgram');

// ...

const app = express();
const dgramSocket = dgram.createSocket('udp4');

// ...

app.use((req, res, next) => {
  dgramSocket.on('listening', () => {
    let addr = app.address();
    console.log(`Listening for UDP packets at ${addr.address}:${addr.port}`);
  });

  dgramSocket.on('error', (err) => {
    console.log(`UDP error: ${err.stack}`);
  });

  dgramSocket.on('message', (msg, rinfo) => {
    console.log(`Received UDP message`);
  });

  next();

}

// ...

app.set('port', 8080);

当我运行服务器时,其他所有东西都可以工作,但是我的dgram部分甚至都没有说他们正在监听。 我对Node不太熟悉,对UDP不太了解,所以我可能走错了路。 有没有人能够将UDP消息传递与Express服务器集成?

看起来我对端口的使用做了一些不幸的假设。 事实证明,可以很简单地完成此操作,但是您必须在两个不同的端口上进行监听:

const express = require('express');
const dgram = require('dgram');

// ...

const app = express();

// ... filter stack ...

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

socket.on('listening', () => {
  let addr = socket.address();
  console.log(`Listening for UDP packets at ${addr.address}:${addr.port}`);
});

socket.on('error', (err) => {
  console.error(`UDP error: ${err.stack}`);
});

socket.on('message', (msg, rinfo) => {
  console.log('Recieved UDP message');
});

app.set('port', 8080); // listen for TCP with Express
socket.bind(8082);     // listen for UDP with dgram

奇迹般有效。

您在哪里将套接字绑定到端口? 文件: https//nodejs.org/api/dgram.html#dgram_socket_bind_port_address_callback

尝试在代码底部调用dgramSocket.bind(PORT) ,看看是否触发了控制台日志。 您(可能)必须将套接字代码移到app.use()函数之外。

如果您只是要从套接字发送消息,那么我认为您不需要将其绑定到端口,但是如果您正在监听,则需要告诉它在哪里监听。

暂无
暂无

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

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