Node.js 在Express中侦听UDP消息

Node.js 在Express中侦听UDP消息,node.js,express,tcp,udp,Node.js,Express,Tcp,Udp,我有一个使用Express的基本Node.js服务器。它需要能够处理TCP消息以及UDP消息。TCP部分已经启动并运行良好,但现在我需要集成一种方法来嗅出UDP消息。我尝试使用dgramsocket将处理程序添加到过滤器堆栈中,但没有成功 const express = require('express'); const dgram = require('dgram'); // ... const app = express(); const dgramSocket = dgram.crea

我有一个使用Express的基本Node.js服务器。它需要能够处理TCP消息以及UDP消息。TCP部分已经启动并运行良好,但现在我需要集成一种方法来嗅出UDP消息。我尝试使用
dgram
socket将处理程序添加到过滤器堆栈中,但没有成功

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服务器集成吗?

在哪里将套接字绑定到端口? 文件:

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


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

您将套接字绑定到端口的位置是什么? 文件:

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


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

看起来我对端口的使用做出了一些不幸的假设。事实证明,这可以非常简单地完成,但您必须在两个不同的端口上侦听:

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

工作起来很有魅力。

看起来我对端口的使用做出了一些不幸的假设。事实证明,这可以非常简单地完成,但您必须在两个不同的端口上侦听:

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
工作起来很有魅力