[英]Kryonet not receiving custom classes
I'm trying to set up a basic client and server to get the hang of networking, but I'm running into a problem. 我试图建立一个基本的客户端和服务器来摆脱网络的困扰,但是我遇到了一个问题。
Whenever I send a class with one of my own classes as a variable, the server does not receive it. 每当我发送一个带有自己的类之一作为变量的类时,服务器都不会收到它。 I can use a string/int/etc for the variable perfectly fine but whenever a variable of my own type is included it is not received, along with all objects I try to send after it.
我可以使用string / int / etc作为变量,但无论何时包含我自己类型的变量,都不会接收到它,以及我尝试在其后发送的所有对象。
Everything is registered with Kryo. 一切都在Kryo中注册。 Am I just missing something?
我只是想念什么吗? Any help is appreciated!
任何帮助表示赞赏!
From GameClient: 从GameClient:
public GameClient(String name) {
client = new Client();
client.start();
NetworkManager.register(client);
listener = new ClientListener();
client.addListener(listener);
try {
client.connect(5000, "24.207.67.56", NetworkManager.port);
} catch (Exception e) {
e.printStackTrace();
}
Login login2 = new Login();
User user2 = new User(name);
login2.user = user2;
login2.name = user2.name;
client.sendTCP(login2); // server does not recieve this
Login login = new Login();
login.name = user.name;
client.sendTCP(login); // server receives this only when it is sent before the Login containing the User
}
From GameServer : 从GameServer:
public GameServer() {
server = new Server();
NetworkManager.register(server);
listener = new ServerListener(server);
server.addListener(listener);
try {
server.bind(NetworkManager.port);
} catch (IOException e) {
e.printStackTrace();
}
server.start();
}
In ServerListener: 在ServerListener中:
@Override
public void received(Connection c, Object o) {
System.out.println("recieved");
if (o instanceof Login) {
System.out.println("[SERVER] " + ((Login) o).name + " logged in.");
LoginResult lr = new LoginResult();
lr.result = true;
c.sendTCP(lr);
}
}
From NetworkManager: 从NetworkManager:
public static void register(EndPoint endPoint) {
Kryo kryo = endPoint.getKryo();
kryo.register(Login.class);
kryo.register(User.class);
}
public static class Login {
public User user;
public String name;
}
User: 用户:
public class User {
public String name;
public User(String name) {
this.name = name;
}
}
So it turns out that the problem was caused by the lack of default constructor in the User class. 因此事实证明,问题是由User类中缺少默认构造函数引起的。 Removing the
User(String name)
constructor or adding a plain User()
constructor fixes the issue. 删除
User(String name)
构造函数或添加普通的User()
构造函数可以解决此问题。
It would be useful if it threw an error when you tried to do it incorrectly, but oh well. 如果您在尝试错误操作时抛出错误,它将很有用,但是,哦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.