2013-02-05 45 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