node.js - 如何在Node.js中输出UDP广播结果到http服务器?

标签 node.js udp broadcast

我想重定向一个简单的 UDP 广播结果,其中包含来自不同设备的多个延迟(2 秒)消息,并将结果呈现为 http 响应。下面的代码运行良好,我可以通过 console.log 查看收集的广播消息,但网络响应为空。如何正确实现?

var dgram = require("dgram");   
var http = require('http');

function broadcast(callback) {

    var data = '';

    var server = dgram.createSocket("udp4");

    server.on("message", function (message, rinfo) {
        data += message;    
    })

    server.bind(11000);

    var socket = dgram.createSocket("udp4");

    socket.bind();
    socket.setBroadcast(true);

    socket.send(Buffer([3]), 0, 1, 11001, '255.255.255.255', function(err, bytes) {     
        socket.close();
    });

    // dealy to collect all messages in 2 sec
    setTimeout(function () {
        callback(data);
    }, 2000);       
}

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});

    broadcast(function(data) {          
        res.write(data);
        console.log(data);          
    });

    res.end();

}).listen(6969, "0.0.0.0");

console.log('HTTP server running at http://0.0.0.0:6969/')

最佳答案

您在发送数据之前调用 res.end()。将 res.end() 移至您的回调中。

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});

    broadcast(function(data) {          
        res.write(data);
        console.log(data);          
        res.end();
    });

}).listen(6969, "0.0.0.0");

关于node.js - 如何在Node.js中输出UDP广播结果到http服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10518035/

相关文章:

javascript - 使用 NodeJS 的图像像素数组追踪边界

node.js - 使用 Mongoose 填充嵌套数组

javascript - Node.js:模块安装在 "addRemoteTarBall"上永远挂起

java - 如何在 android 的异步函数中连续接收 UDP?

c++ - UDP 套接字。如何确定数据是否发送到线路?

java - Java UDP多线程通信的一个问题

node.js - winston 记录器不同日期的不同文件

android - AudioSource.VOICE_CALL 不适用于 android 4.0 但适用于 android 2.3

Android 检测来自任何应用程序的触摸状态

node.js - Socket.io Broadcast.emit 在这里使用不正确?