Sockets y Eventos de teclado en Java

1 respuesta [Último envío]
Imagen de claydergc
Usuario Desconectado. Visto por última vez 2 semanas 6 días. Desconectado
Integró: 19/11/2007
Puntos: 78

Hola:

Tengo un problemilla en mi aplicación. Mi programa es en un juego de dos jugadores en red que consiste en un turno cada jugador.

Hay dos personajes que son dos imagenes, estas se mueven con las teclas direccionales. Cuando se presiona una tecla el socket escribe byte con writeByte() al servidor y este lo envia al otro cliente que tiene en una parte del codigo un readByte().

Cuando presiono la tecla despacio, osea dandole espacio de tiempo entre tecleada y tecleada, los bytes se envian bien; pero cuando presiono las teclas direccionales rapidamente, hay un problema, ya que en cierto tiempo no recibe ningun byte, malogrando las reglas de los turnos.

Me di cuenta que el problema ocurre en la linea de codigo que dice:

byte contadorMovimiento = input.readByte();

como puse varios System.out.println("..."), me di cuenta que cuando presiono rapido hay ciertas presionadas de teclas que no las recibe.

Mi pregunta es: ¿como hago para que siempre se ejecute esa linea y no se salte?, tengo que usar synchronized?

Gracias de antemano.

Saludos.

Su voto: Nada Promedio: 3 (1 vote)

Clayder Gonzalez Cadenillas

hablador sin nombre
Usa un buffer o NEO !

Lo que sucede es que si pulsas demasiado rapido las teclas  ocurren demasiadas I/O con bloqueo y eso significa que solo toma la pulsada de un instante y la que viene acontinuacion no la obedece porque esta bloqueada la I/O por el socket, una solucion seria la que se le da al productor-consumidor, es decir usar un buffer(posiciones de memoria) donde se almacen las pulsadas que se dieron y no se obedecieron para que cuando se termine de procesar la E/S actual, se siga la que esta acontinuacion en la cola, otra solucion es eliminar los bloqueos cuando se hacen las I/O, segun estube leyendo, existe una forma y se llama NEO donde basicamente cambia ese estilo y se denominan canales I/O sin bloqueo, puedes encontrar mas info sobre NEO en el libro de Como programar en java de Deitel la 4º edición.

Espero te ayude en algo

Atte Heberth Deza V.

Distribuir contenido