Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字在与RCON游戏服务器通信时接收保持活动_Java_Sockets_Game Development - Fatal编程技术网

Java套接字在与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”。这是请求和响应的代

我目前正在为RCON服务器协议实现一个游戏服务器管理器。我正在通过套接字打开与服务器的连接:

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);