javascript - 使用 node.js 重组 udp 消息

标签 javascript node.js udp datagram

我刚刚开始使用 node.js 和 UDP。我正在 try catch UDP 数据包然后格式化输出。

我收到的 UDP 数据包被分成多条消息。我不知道如何重新组装消息。我可以连接每条消息,但是我怎么知道消息是完整的呢?我需要处理该数据,但我需要完成消息。

仅供引用...这是用于记分牌类型的应用程序。统计数据通过 UDP 广播,我正在尝试创建一个应用程序来监控统计数据。

这是一些基本代码

var dgram = require("dgram");
var server = dgram.createSocket("udp4");
var fs = require('fs');
var STATS;

server.on("message", function (msg, rinfo) {
STATS = STATS + msg;
msg = msg + '<!>';
console.log(msg);
  });

// *****************************
// When the message is complete
// Process STATS 
// *****************************

server.on("listening", function () {
  var address = server.address();
  console.log("server listening " +
      address.address + ":" + address.port);
});

server.bind(10101);
// server listening 0.0.0.0:41234

最佳答案

你能控制客户端吗?如果是这样,您可以简单地使用某种符号来标识消息的结尾,并且您的程序可以检测 msg 是否以此结尾。

但 UDP 套接字易变 - 无法保证任何消息都会实际到达。也不能保证您的数据报将按照您发送它们的顺序到达。纠正这些问题更加复杂 - 如果您不需要实时要求,那么切换到 TCP 会容易得多。

当您从客户端发送数据时,TCP 会自动将数据分成 block ,因此您将需要使用相同的消息结束系统,或检测套接字何时关闭。

关于javascript - 使用 node.js 重组 udp 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436502/

相关文章:

node.js - 在生产环境中运行 NodeJS 服务器

java - 在某些Android设备上严重UDP数据包丢失

udp - 与 char 数组相比,在 boost ASIO 中使用可变缓冲区对象有什么优势?

c# - 匹配美元金额的正则表达式

javascript - 在 bool 语句中使用 continue/break [V8]

javascript - 如果我链接外部 javascript,它会在 dom 完全加载后运行吗?

html - 如何在 react 中禁用内容安全策略

javascript - ng-class 指令显示无效密码确认

javascript - 实现 Hermite 插值 - 多人游戏

linux - mplayer 无法读取 udp 视频流