我已经开始使用NodeJS缓冲区并了解它们,我决定使用Minecraft多人数据包。
因此,每当客户端中的某人进入多人游戏列表/刷新多人游戏列表时,就会向每个服务器发送一个数据包,这就是该数据包的格式
(一般包装)
(握手包)
因此,我能够解码握手包,但是在解码之后,我将发送具有以下格式的响应包:
(握手响应格式)
因此,我使用上述格式创建了一个缓冲区。只是为了测试缓冲区中的所有内容是否符合预期,我对Buffer进行了解码,以防万一那里有什么问题,但那里没有错。
最后,当我向套接字写入缓冲区时,客户端似乎没有任何反应。
在客户端上,这就是我得到的:'无法ping localhost:25565:断开连接'
this.server.on('connection', (socket) => {
socket.on('data', (buffer) => {
try {
const packet = new Packet(buffer);
if(packet.packet_id == PacketTypes.ServerBound.Handshake) {
const handshake = new HandshakePacket(buffer);
this.emit('packetHandshake', handshake);
console.log(`${chalk.yellow('Packet ' + packet.arrival.getTime())} -> Handshake`);
const pingEvent = new PingEvent(socket, handshake);
this.emit('ping', pingEvent);
if(!pingEvent.isCanceled) {
const buf = new MotdPacket(pingEvent).build();
this.logger.log(`Sending MOTD ${pingEvent.motd} to ${pingEvent.ip}`)
socket.write(buf);
this.test(buf);
}
}
} catch(e) {
this.emit('error', e);
}
})
});
这里可能出了什么问题?我只是不确定
顺便说一下,这就是响应缓冲区:
d80100d5017b2276657273696f6e223a207b226e616d65223a2022312e31312e32222c2270726f746f636f6c223a203331367d2c22706c6179657273223a207b226d6178223a203130302c226f6e6c696e65223a20352c2273616d706c65223a205b7b226e616d65223a2022736f6d656f6e65222c226964223a202234353636653639662d633930372d343865652d386437312d643762613561613030643230227d5d7d2c226465736372697074696f6e223a207b2274657874223a202248656c6c6f20776f726c64227d2c2266617669636f6e223a2022227d
我还尝试了删除“收藏夹” JSON条目,或者只是将其保留为空,但没有任何改变
我刚刚开始使用缓冲区和套接字。
哦,我不是使用net.Socket,而是使用http模块和http.on('connection, ... => .on('data', socket => {}))
真是个愚蠢的错误。
答案 0 :(得分:0)
噢,我没有使用net.Socket,而是使用了http模块,以及http.on('connection,... => .on('data',socket => {}))一个愚蠢的错误。