2014-10-18 1 views
4

나는 잘못된 일을 해결하고 일을 변경하는 등의 노력을 해왔으며 아무 소용이 없었습니다. 내 삼성 장치와 디버그 클라이언트 측에 시도 할 때kryonet을 사용하여 서버/클라이언트가 작동하지 않는 Android 게임

는 안드로이드 스튜디오에서 다음과 같은 오류가 발생합니다 :

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) 

나는 그것이 같은 자바 버전을 사용 생각하고, 내가 정확히 같은 클래스를 등록합니다. 클라이언트 측 :

 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; 
} 

당신은 아주 기본적인 코드를 볼 수 있지만 연결로 악몽이다. 도와주세요 !! 나는 안드로이드 스튜디오에서 클라이언트 측을 만들고, 서버는 일식으로 만듭니다. 이것이 문제의 원인이 될 수 있습니까? 그게 내가 생각해 낸 유일한 논리적 인 이유 야. 어떻게 해결할 수 있습니까?

+0

동일한 문제가 발생합니까? 어떻게 서버를 만들었습니까? 방금 Java 애플리케이션으로 Eclipse에 기본 서버를 작성하고 Android Studio에 코딩 된 LibGDX 데스크탑과 연결하려고했습니다. – Madmenyo

답변

2

나는 이것도 가지고 있었고 세 가지로 인해 생길 수있었습니다.

  1. 서버는 다른 빌드/릴리스의 KryoNet을 사용합니다.
  2. 다른 Java 버전으로 컴파일 중입니다.
  3. 두 개의 다른 IDE를 사용하여 서버와 클라이언트를 빌드하고 있습니다.

내 클라이언트 응용 프로그램을 빌드하는 Android Studio로 Java 응용 프로그램을 만들 수 있다는 사실을 알지 못했기 때문에 Eclipse로 내 서버를 실제로 만들었습니다. 클라이언트가 KryoNet을 포함하고 Eclipse에서 찾을 수있는 가장 가까운 버전을 수동으로 가져 오기 위해 Gradle을 사용하고 있었기 때문에 동시에 버전 차이가 발생했습니다.

devs가 자주 다니는 LibGDX IRC 채널에 대한 도움을 받았습니다. 그들은 버전 차이가 문제가 될 것이라고 생각하지 않았습니다 (하지만 가능할 수도 있음). 그들은 클라이언트와 서버를 만들 때마다 동일한 빌드 시스템을 사용해야한다고 말했다. 이 명백한 예기치 않은 오류를 많이 태클.

안드로이드 스튜디오에서 실행되는 기본 자바 프로젝트를 얻은 순간 나는 Gradle의 클라이언트와 동일한 KryoNet 종속성을 포함하는 코드를 모두 복사하여 예상대로 작동했습니다. 그 위에 나는 안드로이드 스튜디오를 좋아하고 지금 어떤 자바 프로젝트를 위해 그것을 사용하여 매우 행복합니다.