4

私は何日もの間、何が悪いのか、物事を変えるなどを解決しようとしてきましたが、役に立ちませんでした.

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スタジオでクライアント側を作成しており、サーバーはEclipseで作成しています。これが問題の原因になる可能性はありますか? それが私が想像できた唯一の論理的な理由です。どうすれば解決できますか?

4

1 に答える 1

2

私もこれを持っていましたが、それは3つのことが原因である可能性があります.

  1. サーバーは、KryoNet の別のビルド/リリースを使用しています。
  2. 別の Java バージョンでコンパイルしています。
  3. サーバーとクライアントを構築するために、2 つの異なる IDE を使用しています。

クライアントアプリを構築していたAndroid StudioでJavaアプリを作成できることを知らなかったので、実際にはEclipseでサーバーを構築していました。クライアントにGradleを使用してKryoNetを組み込み、Eclipseで見つけた最も近いバージョンを手動でインポートしたため、これは同時にバージョンの違いを引き起こしました。

開発者がよくたむろする LibGDX IRC チャンネルで助けてもらいました。彼らは、バージョンの違いが問題になるとは考えていませんでした (しかし、問題になる可能性はありました)。彼らは、私がクライアントとサーバーを構築するときはいつでも、同じ構築システムを使用するべきだと言いました。これは明らかで、多くの予期しないエラーに対処します。

Androidスタジオで実行されている基本的なJavaプロジェクトを取得した瞬間、Gradleのクライアントとまったく同じKryoNet依存関係を含むコードをコピーしました。すべてが期待どおりに機能しました。それに加えて、私は Android Studio が大好きで、今では Java プロジェクトでそれを使用できることを非常にうれしく思っています。

于 2015-09-03T17:37:01.447 に答える