在Node JS服务器上读取TCP数据包

时间:2018-07-01 11:08:15

标签: node.js parsing struct tcp

我正在尝试读取从c ++ tcp客户端发送的节点js上的tcp数据包。下面是tcp客户端发送的结构

struct LoginPacket
{
    uint16_t packetLength; // value:24
    uint8_t cmd; // value: 96
    uint8_t version; // value: 1
    uint8_t checkSum; // value: 1
    uint8_t type1; // value: 1
    uint8_t type2; // value: 1
    uint8_t random; // value: 8
    uint8_t lengthOfText; // value: 7
    char *textField; // value: "abcd\0"
};

下面是我的nodejs服务器应用程序,用于读取此结构。

var tcpSock = require('net');

var server = tcpSock.createServer(function(socket) {
    socket.write('Echo server\r\n');
    socket.pipe(socket);

//var buffer = new Buffer(4096, 'hex');
// listen for incoming data
socket.on("data", function(data){

buf = new Buffer(256);
len = buf.write(data.toString());

var Struct = require('struct').Struct;

function getPacketHeader(buffer){
    var packetHeader = new Struct()
                           .word16Ule('packetLength')
                           .word8Ube('cmd')
                           .word8Ube('version')
                           .word8Ube('checkSum')
                           .word8Ube('type1')
                           .word8Ube('type2')
                           .word8Ube('random')
                           .word8Ube('lengthOfText')
                           .charsnt('textField', 4)

packetHeader._setBuff(buffer);
return packetHeader;

};

// pack incoming data into the buffer
var incomingPacket = getPacketHeader(buf);
var packetLength = incomingPacket.get('packetLength');
var command = incomingPacket.get('cmd');
var version = incomingPacket.get('version');
var checkSum = incomingPacket.get('checkSum');
var type1 = incomingPacket.get('type1');
var type2 = incomingPacket.get('type2');
var random = incomingPacket.get('random');
var lengthOfTextField = incomingPacket.get('lengthOfTextField');
var textField = incomingPacket.get('textField');

console.log(packetLength);
console.log(command);
console.log(version);
console.log(checkSum);
console.log(token);
console.log(random);
console.log(magicNumber);
console.log(lengthOfTextField);
console.log(textField);
})

});

server.listen(8000, '127.0.0.1');

当我将textField大小分配为5个字节并从客户端发送字符串“ abcd \ 0”时,服务器将为文本字段打印空白。

输出

24
96
1
1
1
1
8
7

您能帮助我正确阅读字符串吗?

0 个答案:

没有答案