Bir soketten ikili komutları okuyan bir sunucu programım var. Sokete gönderilen tampon, verilerinin çok özel olarak sipariş edilmesini gerektirir. Bu, sağlanan bir örnek istemci uygulamasından gönderilen ve gönderilmesi gereken verilerin sırasını ve boyutunu gösteren bazı C kodudur.Düğüm: 16bit ikili bilgi gönderme
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 yapı soketine bir boşluk işaretçi olarak geçirilir:
send(connfd, (void*)jFormat, sizeof(JobHdrFormat_t) + jFormat->jLen , 0);
Şimdi, Node.js. bu tampon çoğaltmak için gereken Node Buffer sınıfına baktım ama sadece Octets'i desteklediğini fark ettim. Gördüğünüz gibi, bellek yuvalarının çoğu 16 bit tam sayı için ayrılmıştır. Verilerin Node.js'nin bu C kodu gibi ihtiyacım olan şekilde ayarlanması mümkün mü? Burada ona bir ilk atış almış:
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');
});
ben üzerinden, döngü bir dize olarak tampon yazmaya teşebbüs ettik Aşağı yukarı, daha sonra her iki 'byte' gibi tek altıgen değerlerini yazmak ve Bunları sayılara geri dönüştürün ve arabelleği dışarı yazın. Düğüm sadece Octets ile çalışabilirse bu mümkün mü? Daha fazla bilgiye ihtiyacın olursa haberim olsun.