我必须发送一个数据包,当以十六进制查看时:
0A 00 2C 01 23 00 0C 00 B3 01
0A 00
的长度为10
2C 01
是标识符12c
或者可以是十进制数据包ID
23 00
是dec 35的版本。
0C 00
是12月12日的另一个版本
b3 01
是435。
来自不同的变量和配置。
var packet_id = 300;
var game_version = config.game.version; // 35 from config
var update_version = config.update.version; // 12 from config
var date_version = config.date.version; // 435 from version
然后根据长度计算长度。然后构建此缓冲区并发送它..
但是我该怎么做?我还想我想要预定义数据包结构,只需输入如下参数:
packet("versionCheck", // name of packet structure (defined somewhere
300 , // the packet id on the structure
config.game.version, // the 2nd parameter for the versionCheck structure.....
............
我正在尝试使用bigeasy的数据包来节点,但我只能使用Parsing,而不是使用Building数据包。
答案 0 :(得分:0)
这实际上是数据包的一个非常基本的例子,因为一切都是静态的。这样的事情可能有用:
function Packet (length, id, v1, v2, other) {
this._length = length;
this._id = id;
this._v1 = v1;
this._v2 = v2;
this._other = other;
}
Packet.prototype.toBuffer = function () {
var buffer = new Buffer(this._length);
buffer.writeUInt16LE(this._length, 0);
buffer.writeUInt16LE(this._id, 2);
buffer.writeUInt16LE(this._v1, 4);
buffer.writeUInt16LE(this._v2, 6);
buffer.writeUInt16LE(this._other, 8);
return buffer;
}
var packet = new Packet(10, 0x12c, 35, 12, 435);
console.log(packet.toBuffer());
同样,对于解析,您不需要任何特殊内容,与toBuffer
相同,但使用read
代替write
方法