gpt4 book ai didi

java - Kryonet 客户端在向服务器发送数据包后断开连接(java)

转载 作者:行者123 更新时间:2023-12-02 05:26:42 25 4
gpt4 key购买 nike

我正在做一个小型 MMO 项目,现在我正在开发登录/注册系统。每当我尝试发送 ClientLoginPacket 时,客户端就会与服务器断开连接,并且服务器根本不会收到该数据包。没有显示堆栈跟踪,但这是我的代码。抱歉,有点多,但都是必要的:

ClientLoginPacket.java:

package net.vediogames.archipelo.networking.packets;

import net.vediogames.archipelo.networking.Networking;

public class ClientLoginPacket extends Packet{

private String username;
private String password;
private int validity = 0;

public ClientLoginPacket(String username, String password){
this.username = username;
this.password = password;
}

public String getUsername(){
return this.username;
}

public String getPassword(){
return this.password;
}

public int getLoginValidity(){
return validity;
}

public void setLoginValidity(int validity){
this.validity = validity;
}

public void send(){
Networking.sendTCP(this);
}
}

这是登录数据包。这个和服务器的唯一区别是导入和包声明(它的 archipeloserver 而不仅仅是 archipelo)。正如你所看到的,这个类扩展了Packet,这是我的Packet类:

package net.vediogames.archipelo.networking.packets;

public abstract class Packet {

protected int connectionID;

public abstract void send();

public int getConnectionId(){
return connectionID;
}
public void setConnectionID(int id){
this.connectionID = id;
}

}

所有数据包都有一个 send() 方法,调用该方法来发送它们。我发送数据包的方式是通过执行此 new ClientLoginPacket(username, password).send();。在 ClientLoginPacket 类中,您可以看到它运行 Networking.sentTCP(this) 来发送数据包。这只是在我的主 kryonet 类 Networking.java 中运行此代码。这是它用来在客户端发送数据包的代码:

public static void sendTCP(Packet object){
client.sendTCP(object);
}

在 kryonet 中,您必须在发送类(class)之前注册类(class)。我这样做了,但我不知道我是否做得正确。这是我使用的确切代码。服务器:

private static void setupClasses(){
Kryo kryo = server.getKryo();
kryo.register(ClientRegisterPacket.class);
kryo.register(ClientLoginPacket.class);
System.out.println("Registered classes.");
}

客户:

public static void setupClasses(){
Kryo kryo = client.getKryo();
kryo.register(ClientRegisterPacket.class);
kryo.register(ClientLoginPacket.class);
}

我确信的是,在发送数据包之前我确实与服务器建立了连接,我使用服务器上的连接监听器对其进行了测试。我的问题是什么?我的类(class)注册有问题吗?两个类必须完全相同吗?提前致谢!

附:抱歉把所有代码都扔掉了。如果没有必要,我通常不会这样做。我尽量放最少的。如果您需要更多信息来了解其他内容如何工作以及问题是否存在,请询问我。谢谢!

最佳答案

Kryo 需要一个不带任何参数的构造函数来反序列化。看来您的 ClientLoginPacket 可能需要一个?这也给我带来了一个问题。直到我在服务器上使用调试 kryonet jar 并打开日志记录后,我才收到解释它的错误消息。

关于java - Kryonet 客户端在向服务器发送数据包后断开连接(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com