2017-03-03 13 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と呼ばれるフォルダを作成し、jarファイルをダウンロードし、その中に瓶を入れて、あなたの build.gradle(コア内の依存関係)にこれを追加します。 compile fileTree(dir: 'libs', include: '*.jar')
+0

は、私はあなたが示唆したものをやってみましたが、私は同じ取得エラー。また、私は 'null'をチェックしましたが、' null'文字列を送信していません。私はLibgdxアプリケーションの一部ではないクライアントから接続しようとすると動作します。クライアントがLibgdxの中にいるときだけエラーが出ます。 – Andy

+0

@AndyデスクトップまたはAndroidから接続していますか? –

+0

私はデスクトップから接続しようとしています – Andy

関連する問題