2016-04-14 14 views
0

ソケットからバイナリコマンドを読み取るサーバープログラムがあります。ソケットに送信されるバッファは、そのデータが非常に細かく順序付けされている必要があります。これは提供されているクライアントアプリケーション例のCコードの一部で、送信する必要があるデータの順序とサイズを示しています。構造体をソケットにボイドポインタとして渡されノード:16bitバイナリ情報を送信する方法

typedef unsigned char  u8; 
typedef unsigned short u16; 
typedef unsigned int  u32; 

typedef struct JobNodeInfo_s { 
    u16 jNodeInfoType;       /* per END device, per router, whole system */ 
    u8 value[32];  /* mac address/barcode value/Location */ 
} JobNodeInfo_t; 

typedef struct JobHdrFormat_s { 
    u16     jPreamble; 
    JobCommandType_t jCmd; 
    u16     jBatchID;  /* for logging */ 
    u16     jSeq; 
    u16     priority; 
    u16     option;   /* option field could be reserved for future extension */ 
    JobNodeInfo_t  jNodeInfo; 
    u16     jLen; 

} JobHdrFormat_t; 

JobHdrFormat_s:

send(connfd, (void*)jFormat, sizeof(JobHdrFormat_t) + jFormat->jLen , 0); 

は今、私はNode.js.でこのバッファを複製する必要がありますNode Bufferクラスを調べましたが、オクテットしかサポートしていません。ご覧のように、メモリスロットのほとんどは16ビット整数用に予約されています。 Node.jsのデータをこのCコードのように整理することは可能ですか?私はここでそれを最初のショットを撮影しています

var net = require('net'); 
var client = new net.Socket(); 
client.connect(13929, '192.168.2.2', function() { 
    var mac_addr = "041511000960", 
     outgoing_str = "FE9C00020000001100000004" 
      + mac_addr 
      + "0000", 
     outgoing_buf = new Buffer(outgoing_str.length, "hex"); 
var new_buff_arr = []; 
for (var i = 0, il = outgoing_str.length; i < il; i += 2) { 
    var cmd_substr = "0x" + outgoing_str.substring(i, i + 2), 
     i_cmd_substr = parseInt(cmd_substr); 
     console.log("substr: " + cmd_substr + " int: " + i_cmd_substr); 
     new_buff_arr.push(i_cmd_substr); 
} 
const buf = new Buffer(new_buff_arr); 
    client.write(buf , 
     function() { 
      console.log("data is written"); 
     } 
    ); 
}); 

client.on('data', function(data) { 
    console.log('Received: ' + data.toString("hex")); 
}); 

client.on('close', function() { 
    console.log('Connection closed'); 
}); 

が、私はそれを介して、ループを文字列としてバッファを書き込もうとしました多かれ少なかれ、その後、それぞれ2つの「バイト」などのシングル進値を書き込み、それらを数字に変換してバッファを書き出します。ノードがオクテットでしか動作しない場合、これは可能ですか?これ以上の情報が必要な場合はお知らせください。 this

答えて

0

ルック:

[ザ・] jBinaryは、JavaScriptでバイナリデータを扱うためのライブラリである[]自動的に持つ任意のソースからのデータのロードは、現在のブラウザやNode.jsのに最高のサポートされている方法を検出できます

そしてまたjBinary library Typesets ...

を見て私はjBinaryとNode.js.経験がありませんしかし、私はそのような機能に興味があり、今私はこの解決策を見つけました。

関連する問題