Professional Documents
Culture Documents
Creacin de un servidor en Java que soporte varios clientes al mismo tiempo con el uso de threads Hace unos das veamos cmo hacer que un programa cliente y un programa servidor intercambiaran mensajes desde distintos puntos de la red: Comunicacin cliente servidor. Hoy veremos cmo hacer lo mismo pero dando soporte a muchos clientes al mismo tiempo utilizando para cada uno de ellos un Thread o Hilo. a estructura cliente!servidor es bastante similar" sin embargo" introducimos el concepto de #eceptor. $ara cada cliente que se conecte al servidor crearemos un nuevo hilo en el mismo que se encargar% de gestionar el cliente. &ste receptor lo representamos con la clase Java: ServidorHilo.java
private Socket socket; private DataOutputStream dos; private Data nputStream dis; private int idSessio;
this.socket $ socket; this.idSessio $ id; tr% { dos $ ne& DataOutputStream!socket.getOutputStream!##; dis $ ne& Data nputStream!socket.get nputStream!##; ' catch ! O(xception ex# { )ogger.get)ogger!ServidorHilo.class.get*ame!##.log!)evel.S(+(,(" null" ex#; ' '
public void desconnectar!# { tr% { socket.close!#; ' catch ! O(xception ex# { )ogger.get)ogger!ServidorHilo.class.get*ame!##.log!)evel.S(+(,(" null" ex#; ' '
-Override public void run!# { String accion $ ..; tr% { accion $ dis.read/T0!#; i1!accion.e2uals!.hola.##{ S%stem.out.println!.(l cliente con idSesion .3this.idSessio3. saluda.#; dos.&rite/T0!.adios.#;
'
&n el constructor creamos dos bu''ers (uno de entrada y otro de salida) para gestionar los envos y recibos del cliente" y dentro del m*todo #+, gestionamos qu* hacer cuando recibamos un mensaje del cliente.
Servidor
a clase Servidor.java se encarga de asignar un nuevo Thread a cada nueva cone-in.
import java.io.*; import java.net.*; import java.util.logging.*;
tr% { ss $ ne& ServerSocket!789:;#; S%stem.out.println!.<t4O=5.#; int idSession $ 8; &hile !true# { Socket socket; socket $ ss.accept!#; S%stem.out.println!.*ueva conexi>oacute;n entrante? .3socket#; !!ServidorHilo# ne& ServidorHilo!socket" idSession##.start!#; idSession33; '
' catch ! O(xception ex# { )ogger.get)ogger!Servidor.class.get*ame!##.log!)evel.S(+(,(" null" ex#; ' ' '
Cliente
&l Clien e.java lo representamos mediante otra clase llamada $ersona que se encarga de enviar y recibir los mesnajes que vienen y van del servidor.
import java.io.*; import java.net.Socket; import java.util.*; import java.util.logging.*;
protected Socket sk; protected DataOutputStream dos; protected Data nputStream dis; private int id;
-Override public void run!# { tr% { sk $ ne& Socket!.7A:.8.8.7." 789:;#; dos $ ne& DataOutputStream!sk.getOutputStream!##; dis $ ne& Data nputStream!sk.get nputStream!##;
S%stem.out.println!id 3 . env>iacute;a saludo.#; dos.&rite/T0!.hola.#; String respuesta$..; respuesta $ dis.read/T0!#; S%stem.out.println!id 3 . Servidor devuelve saludo? . 3 respuesta#; dis.close!#; dos.close!#;
sk.close!#; ' catch ! O(xception ex# { )ogger.get)ogger!@ersona.class.get*ame!##.log!)evel.S(+(,(" null" ex#; ' ' '
public static void main!String45 args# { Crra%)istDthreadE clients $ ne& Crra%)istDthreadE!#; 1or !int i $ 8; i D 9; i33# { clients.add!ne& @ersona!i##; ' 1or !Thread thread ? clients# { thread.start!#; ' ' ' DFthreadEDFthreadE
Como ejemplo" se crean . clientes que se conectan al servidor. Prohibida la reproduccin total o parcial de este artculo sin el previo consentimiento de Webtutoriales.com
http?FF&&&.&ebtutoriales.comFarticulosFcomunicacionGentreGunGservidorG%GmultiplesGclientes