2013-02-05 48 views
1

这让我非常困惑。我在node.js的以下套接字服务器(简体):node.js缓冲区二进制输出不同

net.createServer(function (socket) { 
    socket.on('data', function (data) { 
     var replyData = new Buffer('78780E00C425BA53269830303000006C2D0D0A', 
      'hex').toString('binary'); 
     socket.end(replyData); 
    }); 
}).listen(config.port); 

我希望它回复到任何客户端是在缓冲十六进制指定的二进制文件,但它实际上回复:78780E00C38425C2BA5326C298303030006C2D0D0A

这是相似的,但不完全是它应该发送的。我错过了什么?

+0

请在您用来打印/检查回复的客户端上向我们展示您的代码。 :) – rdrey

+0

@rdrey:我没有写任何客户端代码。我简单地做了'wget http:// localhost:9880'并使用十六进制编辑器(Okteta)查看文件 – neelsg

+0

糟糕,我的不好。我认为这是一个Socket.io问题。你的'wget'是测试这个的完全合理的方法。 :) – rdrey

回答

2

这很简单,只需要直接传递一个Buffer到您的插座:

var net = require('net'); 

net.createServer(function (socket) { 
    socket.on('data', function (data) { 
    socket.end(new Buffer('78780E00C425BA53269830303000006C2D0D0A', 'hex')); 
}); 
}).listen(config.port); 

编辑:刚才重读你的问题,并想出了你的问题没有得到数据的二进制文件。尽管如此,我的代码适用于我:

 
laurent ~/dev/test $ wget http://localhost:3001 --output-document=data 
laurent ~/dev/test $ hexdump data 
0000000 78 78 0e 00 c4 25 ba 53 26 98 30 30 30 00 00 6c 
0000010 2d 0d 0a          
0000013 

告诉我,如果你有不同的东西。

+0

现在感觉就像一个白痴 – neelsg