2017-03-03 129 views
0

我試圖從使用libgdx接口到服務器的客戶端進行連接。我在客戶端和服務器上都使用Kryonet。但它不起作用。任何想法有什麼不對?將客戶端連接到服務器Kryonet和Libgdx

下面是我在客戶端使用的代碼:

 Client client = new Client(); 
     Kryo kryo = client.getKryo(); 
     kryo.register(String.class); 
     client.start(); 
     new Thread() { 
      public void run() { 
       try { 
        client.connect(5000, "localhost", 54555, 54777); 
        client.addListener(new Listener() { 
         public void received(Connection connection, Object object) { 
          if (object instanceof String) { 
           String response = (String) object; 
           System.out.println(response); 
          } 
         } 
        }); 
       } catch (IOException e) { 
        Log.warn("expection", e); 
       } 
      } 
     }.start(); 
    client.sendTCP("Hey There"); 

這裏是服務器代碼:

Server server = new Server(); 
    Kryo kryo = server.getKryo(); 
      kryo.register(String.class); 
      server.start(); 
      try { 
       server.bind(54555, 54777); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      server.addListener(new Listener() { 
       public void received (Connection connection, Object object) { 
        if (object instanceof String) { 
         String request = (String)object; 
         System.out.println("Server"+request); 

         String response = "Login succes"; 
         connection.sendTCP(response); 
        } 
       } 
      }); 

這裏是我的錯誤:

[kryonet] Error updating connection. 
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(Unknown Source) 
Exception in thread "Client" 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(Unknown Source) 
00:05 WARN: expection 
java.net.SocketTimeoutException: Connected, but timed out during TCP registration. 
Note: Client#update must be called in a separate thread during connect. 
    at com.esotericsoftware.kryonet.Client.connect(Client.java:168) 
    at com.esotericsoftware.kryonet.Client.connect(Client.java:117) 
    at me.fort.historywars.LoginScreen$1.run(LoginScreen.java:37) 

回答

0

好的,我認爲這個代碼是固定的:

服務器:

server = new Server(); 
    Kryo kryo = server.getKryo(); 
    kryo.register(SRq.class); 
    server.start(); 
    try { 
     server.bind(54555, 54777); 
    } catch (Exception e) { 
     System.err.println("Failed to bind to port!"); 
    } 
    server.addListener(new Listener() { 
     @Override 
     public void received(Connection connection, Object object) { 
      if(object instanceof SRq) { 
       System.out.println("Server " + ((SRq) object).data); 
       SRq sRq = new SRq(); 
       sRq.data = "Data"; 
       connection.sendTCP(sRq); 
      } 
     } 
    }); 

客戶:

client = new Client(); 
    Kryo kryo = client.getKryo(); 
    kryo.register(SRq.class); 
    client.start(); 
    try { 
     client.connect(6000, "localhost", 54555, 54777); 
    } catch (Exception e) { 
     System.err.println("Failed to connect to server!"); 
    } 
    client.addListener(new Listener() { 
     @Override 
     public void received(Connection connection, Object object) { 
      if(object instanceof SRq) { 
       Gdx.app.log("Client", ((SRq) object).data); 
      } 
     } 
    }); 
    System.out.println("Connected to server!"); 

    SRq sRq = new SRq(); 
    sRq.data = "Log in"; 
    client.sendTCP(sRq); 

事情要記住:

  • SRq.class僅僅是一個公共String裏面
  • 類請確保您使用您的客戶端和服務器中都有相同的KryoNet版本。我用kryonet-2.21-all。下載的罐子,做一個在你的核心文件夾,名爲libs文件夾,把罐子裏面,並添加到您的build.gradle(核心依賴):compile fileTree(dir: 'libs', include: '*.jar')
+0

我試圖做你的建議,但我得到相同錯誤。另外,我檢查了'null',但是我沒有發送'null'字符串。如果我嘗試從不屬於Libgdx應用程序的客戶端進行連接,它會有效。當客戶端位於Libgdx內部時,我只會收到錯誤消息。 – Andy

+0

@你在從桌面或Android連接嗎? –

+0

我試圖從桌面連接 – Andy

相關問題