使用kryonet的Android游戏客户端/服务器无法工作

4

我已经尝试了好几天,更改了很多东西,但都没有效果。

当我试图使用我的三星设备调试客户端时,在Android Studio中出现以下错误:

com.esotericsoftware.kryonet.KryoNetException: Incorrect number of bytes (1 remaining) used to deserialize object: null
        at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:146)
        at com.esotericsoftware.kryonet.Client.update(Client.java:255)
        at com.esotericsoftware.kryonet.Client.run(Client.java:338)
        at java.lang.Thread.run(Thread.java:856)

我认为它使用的是相同的Java版本,并且我完全按照相同的方式注册了该类。 客户端:

     Client client = new Client();
            Kryo kryo = client.getKryo();
            kryo.register(SomeRequest.class);
            kryo.register(SomeResponse.class);
            client.start();
            try{
                client.connect(5000, "10.0.0.4", 31055, 32055);
            }catch (IOException e) {
                throw new GdxRuntimeException(e);
            }

            SomeRequest request = new SomeRequest();
            request.text = "Here is the request";
            client.sendTCP(request);

            client.addListener(new Listener() {
                public void received (Connection connection, Object object) {
                    if (object instanceof SomeResponse) {
                        SomeResponse response = (SomeResponse)object;
                        System.out.println(response.text);
                    }
                }
            });

服务器端:

Server server = new Server();
        Kryo kryo = server.getKryo();
        kryo.register(SomeRequest.class);
        kryo.register(SomeResponse.class);
        server.start();
        System.out.println("server started");
        server.bind(31055, 32055);
        server.addListener(new Listener(){
            public void connected(Connection connection){
                System.out.println("connect");
            }

               public void received (Connection connection, Object object) {
                   if (object instanceof SomeRequest) {
                      SomeRequest request = (SomeRequest)object;
                      System.out.println(request.text);

                      SomeResponse response = new SomeResponse();
                      response.text = "Thanks";
                      connection.sendTCP(response);
                   }
                }
        });

    }

类:

class SomeRequest{
    public String text;
}
class SomeResponse {
    public String text;
}

从代码可以看出,它非常基础,但是连接起来却是一场噩梦。 请帮忙!! 我正在Android Studio中创建客户端,并在Eclipse中创建服务器。这可能是问题的原因吗?这是我能想到的唯一合理的原因。 如何解决?


遇到同样的问题了吗?你是如何创建服务器的?我只是在Eclipse中编写了一个基本的Java应用程序作为服务器,并尝试使用在Android Studio中编码的LibGDX桌面运行连接到它。 - Madmenyo
1个回答

2
我也有这个问题,可能由以下三个原因之一造成:
  1. 服务器使用不同版本的KryoNet。
  2. 您正在使用不同的Java版本进行编译。
  3. 您在构建服务器和客户端时使用了两个不同的IDE。
我实际上是在Eclipse中构建我的服务器,因为我不知道我可以使用Android Studio创建Java应用程序,而我的客户端应用程序是在Android Studio中构建的。这同时导致了版本差异,因为我正在使用Gradle为客户端包含KryoNet并在Eclipse中手动导入了最接近的版本。
我在LibGDX IRC频道得到了一些帮助,在那里开发人员经常挂着。他们认为版本差异不会成为问题(但有可能)。他们说每当我构建客户端和服务器时,它们都应该使用相同的构建系统。这显然能解决许多未预料的错误。
我在Android Studio中运行了一个基本的Java项目,将与客户端Gradle中完全相同的KryoNet依赖项复制到了代码中,一切都如预期的那样工作。此外,我喜欢Android Studio,并很高兴将其用于任何Java项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接