ソケットからバイナリコマンドを読み取るサーバープログラムがあります。ソケットに送信されるバッファは、そのデータが非常に細かく順序付けされている必要があります。これは提供されているクライアントアプリケーション例の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で