Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > PROBLEMA con SOCKET y GUI

Muy buenas a todos.

Estoy haciendo mi proyecto fin de carrera, que no es mas que una App J2SE con interfaz Grafico, la cual monta un servidor TCP con la iterfaz SOCKET y realiza unos servicios en funcion de unas consultas que hace en una BBDD de MySQL.

Ahora ya puestos en situación:

Mi problema es el siguiente; Mi servidor es un servidor que DEBE trabajar de manera concurrente, abriendo un hilo para cada cliente (HASTA AHÍ NO HAY NADA COMPLICADO), el problema viene cuando lo asocio a un Jbutton de la interfaz gráfica, solicitando que al pulsarlo se instancie el servidor (es, decir, solicitamos ARRANCAR el servidor).

aqui esta el problema y he logrado hallar 2 bifurcaciones, de las cuales ninguna es valida:

1) El servidor es multiThread pero deja bloqueada la Interfaz Gráfica
2) El servidor NO logra atender a varios clientes a la vez (por lo tanto NO es concurrente) pero he logrado que no deje la interfaz grafica bloqueada.

y ahora mi pregunta:

¿Alguno teneís un codigo de ejemplo REALMENTE PROBADO que sea CONCURRENTE y por lo tanto capaz de atender AL MISMO TIEMPO a varios clientes?

lo digo porque llevo ya una semana con esta problematica, y mucha gente presume de tener el codigo de un chat en java con su GUI y tal y cual... me los descargo los pruebo y con probarlos me refiero a

1 servidor
y
2 o mas clientes

¡¡Y SE QUEDAN BLOQUEADOS TB !!!

Solo les funciona entre Servidor y cliente, pero cuando actua un 2º cliente la cosa cambia...
Repito solo me pasa con la INTERFAZ GRAFICA.... en modo consola va bien...

he estado leyendo y he visto algo acerca de una EDT de la GUI de java.... es una especie de cola de eventos.... y bueno en fin....
no me enrollo mas, si alguno sabeis como solucionarlo o teneis un codigo que sea valido.
Tener por cuenta que os deberé una cervecita ;)

Muchas gracias de antemano.

julio 31, 2012 | Registered Commenterreylagarto19

Guenas.

El codigo para lo que dices puede ser un poco largo pero te puedo dar algunas indicaciones que pueden ayudarte.

Para que no se bloquee el interfaz es evidente que el servidor (el bucle en el que se ejecuta el accept del ServerSocket) debe correr en un hilo propio.
Tu boton de arrancar lo que debe hacer es simplemente crear el Thread y arrancarlo, volviendo inmediatamente.
Por otra parte el bucle donde haces el accept debe crear y arrancar un hilo nuevo para cada socket devuelto por el accept.

Hay formas mucho mejores de implementar un servidor usando NIO, pero eso es bastante mas complejo.
Otra cosa es que uses librerias externas como Grizzly o Netty

Un saludo

agosto 1, 2012 | Unregistered CommenterPaposo