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 中创建服务器。这可能是问题的原因吗?这是我能够怀孕的唯一合乎逻辑的原因。我该如何解决?

4

1 回答 1

2

我也有这个,它可能是由三件事引起的。

  1. 服务器使用不同的 KryoNet 构建/发布。
  2. 您正在使用不同的 Java 版本进行编译。
  3. 您正在使用两个不同的 IDE 来构建服务器和客户端。

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

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

当我在 Android Studio 中运行一个基本的 Java 项目时,我复制了包含与 Gradle 中的客户端完全相同的 KryoNet 依赖项的代码,一切都按预期工作。最重要的是,我喜欢 Android Studio,并且很高兴现在可以将它用于任何 Java 项目。

于 2015-09-03T17:37:01.447 回答