You are on page 1of 7

COMUNICACIN ENTRE UN SERVIDOR Y MLTIPLES CLIENTES

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

import java.io.*; import java.net.*; import java.util.logging.*;

public class ServidorHilo extends Thread {

private Socket socket; private DataOutputStream dos; private Data nputStream dis; private int idSessio;

public ServidorHilo!Socket socket" int id# {

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.#;

'

' catch ! O(xception ex# { )ogger.get)ogger!ServidorHilo.class.get*ame!##.log!)evel.S(+(,(" null" ex#; '

desconnectar!#; ' '

&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.*;

public class Servidor {

public static void main!String args45# thro&s O(xception {

ServerSocket ss; S%stem.out.print!. niciali6ando servidor... .#;

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.*;

class @ersona extends Thread {

protected Socket sk; protected DataOutputStream dos; protected Data nputStream dis; private int id;

public @ersona!int id# { this.id $ 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 class Bliente {

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

You might also like