在node.js中单独发送套接字数据

时间:2016-01-28 07:06:45

标签: node.js

我现在正在尝试从node.js(服务器)连续发送字节到Android(客户端)。让我展示代码示例。

var net = require('net');
var server = net.createServer(function(c){
    c.on('data', function(data){
        if(data == 'foo'){
            for(var i = 1; i <= 255; i++){
                var byteData = makeBytedata();
                c.write(byteData);
                wait(100)
            }
        }
    });
});

此代码无法正常工作,因为它有时会将byteData与一个数据包组合在一起。有没有人有解决方案分别发送字节?

1 个答案:

答案 0 :(得分:0)

net.createServer创建TCP服务器, TCP不会单独发送消息。 TCP是 stream 协议,这意味着当您向套接字写入字节时,您在接收端以相同的顺序获得相同的字节。

一种解决方法:为您的消息定义一种格式,以便您的客户端可以确定套接字流中消息的开头和结尾。例如,您可以使用\n标记邮件的结尾。

   for(var i = 1; i <= 255; i++){
        var byteData = makeBytedata();
        c.write(byteData + '\n');
    }

然后客户可以通过\n分隔它们。

另一种方法是使用UDP/Dgram

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

server.on("message", function(msg, rinfo) {
    // send message to client 
});