Anda di halaman 1dari 2

Programacin con sockets TCP en Java

Como ya sabis, los sockets son la base de las comunicaciones entre ordenadores y suponen el punto de enlace entre nuestra aplicacin e Internet. Por lo tanto es imprescindible conocer los cimientos de las comunicaciones entre ordenadores para poder hacer uso de ellos en prcticas posteriores. Socket es una palabra inglesa. Uno de sus significados es enchufe!. "l socket es a las comunicaciones entre ordenadores lo #ue el enchufe del telfono es a la comunicacin telefnica. "l socket es por tanto el interfa$ entre nuestra aplicacin y la tecnolog%a #ue permite la transmisin de datos &por e'emplo, los protocolos de red(. )l igual #ue sucede con el telfono, deben e*istir sendos sockets a ambos lados de la l%nea de comunicacin. )s% pues, el ser+idor habr de definir un socket y el cliente o los clientes debern definir uno propio. Uno de los parmetros #ue debemos indicar al socket del ser+idor es el puerto en el #ue reali$ar la escucha. "l n,mero de puerto es anlogo a un n,mero de e*tensin telefnica &como cuando llamamos al telfono de un hotel y tenemos #ue decir con #ue habitacin #ueremos comunicar(. -racias al n,mero de puerto el cliente ser capa$ de indicar con #u ser+icio de la m#uina remota #uiere establecer la cone*in. Por otra parte y como sabis, hay dos tipos de control de flu'o de pa#uetes. /CP &/ransmission Control Protocol( y U0P &User 0atagram Protocol(. "n /CP se establece un control estricto sobre la informacin en+iada, se +erifica #ue se haya recibido correctamente en el socket cliente y se reen+%an los pa#uetes #ue no lo hayan hecho. )dems, en /CP se establece una cone*in #ue se mantiene abierta hasta #ue una de las partes la cierre.

La clase Socket
"n 1a+a, los sockets /CP estn proporcionados por la clase Socket. 0icha clase tiene +arios constructores, de los cuales el ms sencillo de usar es Socket&String host, int port(, #ue conecta el socket al puerto indicado por port en la IP indicada por host. "sta es la opcin ms sencilla ya #ue el propio constructor se encarga de iniciar la cone*in. Sin embargo, tambin es posible crear un Socket no conectado usando Socket&( y conectarlo despus mediante connect&Socket)ddress endpoint(. "l en+%o y recepcin de mensa'es se reali$a escribiendo y leyendo bytes en el socket. "l mtodo get2utputStream&( nos de+uel+e un ob'eto 2utputStream. un canal mantenido por el socket en el #ue podemos escribir bytes. )nlogamente, el mtodo getInputStream&( nos de+uel+e un ob'eto InputStream del #ue podemos leer bytes. 3a escritura y lectura de bytes se reali$an de forma similar a como se har%a en archi+os binarios &+ed los mtodos de las clases 2utputStream e InputStream(. Sin embargo, hay un punto importante #ue debemos tratar. cmo leer un n,mero e*acto de bytes del socket. "l mtodo 2utputStream.read&byte45 b( lee los bytes #ue haya disponibles en el stream y los guarda al comien$o del array b. Sin embargo, este mtodo no nos asegura la lectura de un n,mero concreto de bytes, simplemente guardar en b a#uellos #ue estn disponibles en el momento de la lectura. Para ello necesitamos crearnos nuestro propio mtodo como el #ue sigue.
/* * Lee exactamente array.length bytes de "socket" y los guarda en "array". * El control de la ejecucin no se devuelve hasta que no se hayan leido array.length bytes. */ private void recibir loqueante! Socket socket" byte#$ array% thro&s '(Exception ) int leidos * +, &hile!leidos - array.length% leidos * socket.get'nput.tream!%.read!array" leidos" array. length/leidos%, 0

Para terminar con la descripcin de la clase, debis recordar #ue el socket debe cerrarse cuando #ueramos terminar la cone*in con el mtodo close&(.

La clase ServerSocket
"sta clase se utili$a en ser+idores para dar ser+icio simultneo a +arios clientes. "n la Prctica 6 slo +amos a tener un cliente, pero podemos empe$ar a utili$arla igualmente. Instanciando Ser+erSocket en el lado ser+idor podemos instanciar un socket /CP #ue esperar la cone*in de clientes. "l constructor Socket&int port( crea el socket en el puerto local port. Para de'ar el socket a la espera de alguna cone*in empleamos el mtodo accept&( &la e'ecucin se detendr en dicha instruccin hasta #ue alg,n cliente se conecte(. 3os clientes deber%an entonces conectarse al puerto port en la IP del ser+idor. Una +e$ recibida una cone*in, el mtodo accept&( de+uel+e un ob'eto Socket conectado al cliente mediante un puerto local aleatorio. ) tra+s de este nue+o socket /CP podemos comunicarnos con el cliente en+iando y recibiendo mensa'es como ya hemos +isto. "l ob'eto Ser+erSocket debe cerrarse con close&( cuando de'emos de escuchar peticiones. "n el siguiente enlace tenis un e'emplo de uso de las clases Socket y Ser+erSocket. http.77$erioh.tripod.com7ressources7sockets.html

Anda mungkin juga menyukai