我正在尝试读取从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
您能帮助我正确阅读字符串吗?