2014-10-18 129 views
4

我一直在努力幾天工作出什麼錯,改變的東西等,已無濟於事。Android遊戲與服務器/客戶端不工作使用kryonet

獲取在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中創建服務器。這可能是問題的原因嗎?它是我能夠構想的唯一合乎邏輯的理由。 我該如何解決這個問題?

+0

運行在同一個問題?你是如何創建服務器的?我剛剛在Eclipse中編寫了一個基本服務器,作爲一個Java應用程序,並嘗試通過在Android Studio中運行的LibGDX桌面運行來連接它。 – Madmenyo 2015-09-03 15:10:11

回答

2

我也有這個,它可能是由三件事情引起的。

  1. 服務器使用不同版本的KryoNet。
  2. 您正在編譯一個不同的Java版本。
  3. 您正在使用兩個不同的IDE構建服務器和客戶端。

我實際上已經用Eclipse構建了我的服務器,因爲我不知道我可以使用Android Studio創建Java應用程序,在那裏構建我的客戶端應用程序。這同時導致版本差異,因爲我使用Gradle作爲客戶端來包含KryoNet並手動導入了我可以在Eclipse中找到的最近版本。

我在LibGDX IRC頻道上得到了一些幫助,這些頻道經常會出現在開發者面前。他們並不認爲版本差異會成爲問題(但它可能)。他們說,每當我建立一個客戶端和服務器時,他們應該使用相同的構建系統。這明顯解決了很多無法預料的錯誤。

的那一刻我在Android Studio中運行一個基本的Java項目我複製的代碼中包含了完全相同的KryoNet依賴性在搖籃一切客戶按預期工作。最重要的是,我喜歡Android Studio,現在非常樂意將它用於任何Java項目。

相關問題