Juego de Android con servidor / cliente que no funciona con kryonet
He estado tratando durante días para averiguar lo que está mal, cambiar cosas, etc, ha sido inútil.
Obtenga el siguiente error en android studio, al intentar depurar el lado del cliente con mi dispositivo Samsung:
- Cómo instalar gradle-3.0 manualmente
- Cómo configurar mi gradle para la versión final de apk
- Zipalign.exe '' terminado con un valor de salida diferente de cero
- No se puede importar el proyecto al estudio de Android
- Establecer la versión de la aplicación de Android con Gradle
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)
Creo que utiliza la misma versión java, y registro la clase exactamente igual. Lado del cliente:
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); } } });
Lado del servidor:
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); } } }); }
Clases
class SomeRequest{ public String text; } class SomeResponse { public String text; }
Como se puede ver su código muy básico, pero para conectar es una pesadilla. ¡¡Por favor ayuda!! Estoy creando el lado del cliente en el estudio de android, y el servidor que estoy creando en eclipse. ¿Podría esto ser una razón para los problemas? Es la única razón lógica que he podido concebir. ¿Cómo puedo resolver eso?
- No se encuentra la dependencia de la biblioteca nativa de Android
- Cómo agregar el botón de acción flotante en la parte superior de scrollview
- Error de ejecución para la tarea ': app: compileDebugAidl': helpl falta
- Recursos $ NotFoundException al ejecutar pruebas Roboeléctricas
- Las dependencias de build.gradle se actualizan automáticamente
- Actualización de Android Studio -Error: No se pudo ejecutar la acción de compilación mediante la distribución de Gradle
- Problema de generación de Gradle 3.0.0-beta1
- Las pruebas Robolectric fallan cuando se ejecutan en CLI
Tuve esto también y podría haber sido causada por tres cosas.
- El servidor utiliza una versión / compilación diferente de KryoNet.
- Estás compilando con una versión de Java diferente.
- Está utilizando dos IDE diferentes para crear el servidor y el cliente.
En realidad, había construir mi servidor con Eclipse ya que no era consciente de que podía crear aplicaciones Java con Android Studio donde estaba construyendo mi aplicación de cliente con. Esto simultáneamente causó una diferencia de versión ya que estaba usando Gradle para que el cliente incluyera KryoNet e importara manualmente la versión más cercana que pudiera encontrar en Eclipse.
Conseguí ayuda en el canal de IRC de LibGDX, donde los desarrolladores suelen pasar el rato. No pensaron que la diferencia de versión sería un problema (pero podría). Dijeron que cada vez que construyo un cliente y un servidor deberían usar el mismo sistema de compilación. Este obvio aborda muchos errores imprevistos.
El momento en que tengo un proyecto básico de Java en ejecución en el estudio de Android copié el código incluido la dependencia de KryoNet exactamente igual que el cliente en Gradle todo funcionó como se esperaba. Además de eso me encanta Android Studio y estoy muy feliz de usarlo para cualquier proyecto de Java ahora.
- El diálogo de Android se descarta en el segundo clic. ¿Por qué?
- Android SDK ADT no coincide pero no encuentra la actualización