Kryonet客户端在将数据包发送到服务器(java)后断开连接
我在做一个小型MMO项目,现在我正在登录/注册系统上工作。无论何时我尝试发送一个ClientLoginPacket,客户端都会从服务器断开连接,并且服务器根本没有收到该数据包。没有显示堆栈跟踪,但这是我的代码。对不起它的很多,但它的所有必要的:Kryonet客户端在将数据包发送到服务器(java)后断开连接
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)。正如你所看到的,这个类扩展包,这是我的包类:
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中,您必须在发送它们之前注册类。我做到了,但我不知道我是否做得正确。这是我使用的确切代码。 服务器:
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);
}
我知道肯定是我有没有发送数据包之前到服务器的连接,我与服务器的连接监听器进行了测试。我的问题是什么?我的班级注册有问题吗?两个班级必须完全相同吗?提前致谢!
p.s.抱歉把所有的代码都扔掉了。如果我不必这样做,我通常不会这样做。我尽可能减少。如果你需要更多的东西来看看其他东西是如何工作的并且看看问题是否存在,那就问我吧。谢谢!
回答:
Kryo需要一个没有任何参数的构造函数来反序列化。它看起来像你的ClientLoginPacket可能需要一个?这也给我造成了一个问题。直到我在服务器上使用调试kryonet jar并且开启了日志记录之后,我才得到解释它的错误信息。
以上是 Kryonet客户端在将数据包发送到服务器(java)后断开连接 的全部内容, 来源链接: utcz.com/qa/257764.html