Java套接字在与RCON游戏服务器通信时接收保持活动
我目前正在为RCON服务器协议实现一个游戏服务器管理器。我正在通过套接字打开与服务器的连接:Java套接字在与RCON游戏服务器通信时接收保持活动,java,sockets,game-development,Java,Sockets,Game Development,我目前正在为RCON服务器协议实现一个游戏服务器管理器。我正在通过套接字打开与服务器的连接: this.socket = new Socket(); this.socket.connect(new InetSocketAddress(this.getAddress(), this.getPort()), 3000); 连接工作正常,我可以与服务器通信并接收响应。没问题。我的问题是,当我调试通信过程时,从请求到输入流上的读取需要很长时间,我收到一条消息“Keep Alive”。这是请求和响应的代
this.socket = new Socket();
this.socket.connect(new InetSocketAddress(this.getAddress(), this.getPort()), 3000);
连接工作正常,我可以与服务器通信并接收响应。没问题。我的问题是,当我调试通信过程时,从请求到输入流上的读取需要很长时间,我收到一条消息“Keep Alive”。这是请求和响应的代码:
发送:
收到:
InputStream in = this.socket.getInputStream();
byte[] header = new byte[3*4];
in.read(header);
ByteBuffer buffer = ByteBuffer.wrap(header);
buffer.order(ByteOrder.LITTLE_ENDIAN);
int length = buffer.getInt();
int id = buffer.getInt();
int type = buffer.getInt();
int payloadLength = length - (2*4) - 2;
byte[] payload = new byte[payloadLength];
DataInputStream dis = new DataInputStream(in);
dis.readFully(payload);
dis.read(new byte[2]);
payloadString = new String(payload);
我已经搜索了这个与Java和RCON相关的东西,但是我没有找到任何线索。我猜这是一个与RCON相关的影响,因为我必须解释从RCON服务器接收的包,并拆分其内容以获得实际的负载。完成此操作后,有效负载字符串包含“保持活动” 它只能来自一个地方:同伴。它可能是RCON应用程序协议的一部分。您是否考虑过查阅该规范?我已经阅读了该规范好几次,这几乎只是网站上的一个站点。我真的不知道服务器为什么要发送这个消息,因为文档中没有关于它的内容。对于长时间运行的套接字协议来说,有自己的自定义“保持活动”消息并不少见。尽管这不是TCP的标准配置,但如果某些NAT发现线路上没有活动,它会删除端口映射(因此失去连接)。可以预期客户端也会定期发送自己的keep-alive消息,但我对RCON协议不太熟悉。
InputStream in = this.socket.getInputStream();
byte[] header = new byte[3*4];
in.read(header);
ByteBuffer buffer = ByteBuffer.wrap(header);
buffer.order(ByteOrder.LITTLE_ENDIAN);
int length = buffer.getInt();
int id = buffer.getInt();
int type = buffer.getInt();
int payloadLength = length - (2*4) - 2;
byte[] payload = new byte[payloadLength];
DataInputStream dis = new DataInputStream(in);
dis.readFully(payload);
dis.read(new byte[2]);
payloadString = new String(payload);