2017-03-03 131 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

相关问题