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

我一直在努力研究什么是错的,改变事物等等,一直无济于事.

在尝试使用我的Samsung设备调试客户端时,在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中创建服务器.这可能是问题的原因吗?这是我能够设想的唯一合乎逻辑的理由.
我怎么解决这个问题?

最佳答案 我也有这个,它可能是由三件事引起的.

>服务器使用不同的KryoNet构建版本.
>您正在使用不同的Java版本进行编译.
>您正在使用两个不同的IDE来构建服务器和客户端.

我实际上用Eclipse构建了我的服务器,因为我不知道我可以使用Android Studio创建Java应用程序,我正在构建我的客户端应用程序.这同时导致版本差异,因为我使用Gradle为客户端包含KryoNet并手动导入我在Eclipse中可以找到的最接近的版本.

我在LibGDX IRC频道上得到了一些帮助,开发人员经常会在这个频道上闲逛.他们认为版本差异不是问题(但可能).他们说每当我构建一个客户端和服务器时,他们应该使用相同的构建系统.这显而易见地解决了许多无法预料的错误.

我在Android工作室运行基本Java项目的那一刻,我复制了包含与Gradle中客户端完全相同的KryoNet依赖关系的代码,一切按预期工作.最重要的是,我喜欢Android Studio,现在很高兴将它用于任何Java项目.

点赞