Sei sulla pagina 1di 11
Introduccién. En este documento se tratara 1a tematica de la programacién en ambiente cliente servidor de bajo nivel, en especifico de los sockets y canales, Un socket no es mas que un conector que uno dos 0 mas programas que estan en la misma red, pero que se ejecutan en distintos nodos, ya sea en el servidor 0 en un cliente, y es asi como los clientes de un servidor pueden hacer peticiones de recursos de otras maquinas que estén en la misma red, hacia otras maquinas, esto con el finde aprovechar las caracteristicas que offecen los servidores. También se mencionara sobre los dominios, se hablaré de los tres tipos que se implementa, se abordara el tema de desarrollo del lado tanto servidor como cliente con sockets. Socket Un socket és un punto dé comunicacién por el cual un proceso puede emitir o recibir informacién. En el interiar de un proceso, un socket se identifica por un descriptor de la misma naturaleza que los que identifican los archivos, al igual que todos los procesos del sistema UNIX de Berkeley. La comunicacién mediante sockets es una interfaz (0 servicio) con la capa de transporte (nivel 4) de la jerarquia OSI. La filosofia de la divisién por capas de un sistema es encapsular, dentro de cada una de ellas, detalles que conciernen sélo a cada capa, y presentarsela al usuario de tal forma que este pueda trabajar con ella sin necesidad de conocer sus detalles de implementacién. Lainterfaz de acceso a la capa de transporte del sistema UNIX de Berkeley na esta totalmente aislada de las capas inferiores, por lo que a la hora de trabajar con sockets, es necesario conocer algunos detalles sobre esas capas. En concreto, a la hora de establecer una conexi6n mediante sockets, es necesario conocer la familia o dominio de la conexién, yl tipo de conexién La creacién de un socket se realizar por la primitiva socket, la cual veremos con més detenimiento més adelante, cuyo valor de vuelta es un descriptor sobre el cual es posible realizar operaciones de esoritura y lectura. Un socket permite la ‘comunicacién en los dos sentidos (conexién full-diplex) En resumen los sockets: + Sonun mecanismo de comunicacién entre procesos: © Dentro de una misma maquina © Distribuidos en diferentes maquina + Pueden ser identificados mediante un nombre + Proporcionan un intertaz esténdar para el acceso a diferentes protocoles de comunicaciones * Soportan, entre otros, la pila de protocolos TCP/IP Dominios y tipos de sockets. Una familia, o dominio de laconexién, agrupa todos aquellos sockets que comparten caracteristicas comunes. Especifica el formato de las direeciones que se podran dar al socket y los diferentes protocolos soportados por las comunicaciones via los sockets de este dominio. Cada protocol, a la hora de referirse a un nodo de la red, implementa un mecanisma de direccionamiento. Ladirecciéndistingue deforma inequivoca a cada node u ordenador, y es ulilizada para encaminar los datos desde el nodo origen hasta el nodo destino. Hay muchas llamadas al sistema que necesitan un puntero a una estructura de direccién de socket para trabajar. Cada tipo de socket va a definir una serie de propiedades en funcién de las comunicaciones en las cuales esté implicado: La fiabilidad de la transmision. Ningin dato transmitido se pierde. 2. La conservacién del orden de los datos. Los datos llegan en el orden en el que han sido emitidos. 3. La no duplicacién de datos. Sélo llega a destino un ejemplar de cada dato emitido. 4. La comunicacién en modo conectado. Se establece una conexién entre dos puntos antes del principio de la comunicacién (es decir, se establece un citcuilo virtual). A partir de entonces, una emisién desde un extremo esta implicitamente destinada al otro extremo conectado 5. La conservacién de los limites de los mensajes. Los limites de los mensajes emitidos se pueden encontrar en el destino. 6. El envio de mensajes (urgentes). Correspande a la posibilidad de enviar datos fuera del flujo normal, y por consecuencia accesibles inmediatamente (datos fuera de flujo). Gabe resefiar que un cauce de comunicacién normal tiene las cuatro primeras propiedades, pero no las dos tiltimas. Existen tres dominios de comunicacién para un socket + El dominio de internet. (AF_INET). Se utiliza para la comunicacién entre procesos del sistema. * El dominio NS. Se utilizaba sobre los procesos que se comunicaban sobre el protocolo de comunicacién de Xerax. En cuanto a los tipos de sockets disponibles, se pueden considerar: + SOCK_STREAM: Los sockets de este tipo permiten comunicaciones fiables en modo conectado (propiedades a, b,c y d) y eventualmente autorizan, segiin el protocolo: aplicado los mensajes fuera de flujo (propiedad 1). El protocolo subyacente en el dominio Intemet es TCP. Se establece un circuito virtual realizando una bisqueda de enlaces libres que unan los dos ordenadores a conectar (parecido a lo que hace la red telelénica conmutada para establecer una conexi6n entre dos teléfonos). Una vez establecida la conexién, se puede proceder al envio secuencial de los datos, ya que la conexin es permanente. Son streams de bytes ful-diplex (similar a pipes) Un socket stream debe estar en estado conectado antes de que se envie o teciba en él. * SOCK_DGRAM: Corresponde a los sockets destinados a la comunicacién ‘en modo no conectado para el envio de datagramas de tamafe limitade. Las comunicaciones correspondientes tienen la propiedad e. En el dominio Internet, el protocolo subyacente es el UDP. Los datagramas no trabajan con conexiones permanentes. La transmisin por los datagramas es a nivel de paquetes, donde cada paquete puede seguir una ‘uta distinta, no garantizandose una recepcién secuencial de la informacién. + SOCK RAW: Peimite el acceso a los protacolos de mas bajo nivel (por ejemplo, el protocolo IP en el dominio Internet). Su uso esté reservado al supe usuario + SOCK_SEQPACKET: Corresponde a las comunicaciones que poseen las propiedades a, b, ¢, d ye. Estas comunicaciones se encuentran en el dominio XNS. Los dos tipos de sockets mas utlizados son los dos primero. Creacién, implementacién y supresién de sockets. Ala hora de la implementacién de un servidor también necesitamos crear un objeto socket desde él ServerSocket para que esté atento a las conexiones que le puedan realizar clientes potenciales y poder aceptar esas conexiones. Socket socketServicio = null; nt socketServicio = miServicio.a.ccept (); } catch (IOException e) ( ‘System.out printin (e); } Supresién. Siempre se debe de cerrar los canales de entrada y salida que se hayan abierto durante la ejecucién de la aplicacién. Es importante destacar que él orden de cierre es relevante, es decir se deben cerrar primero los streams relacionados con un socket antes que el propio Socket, ya que de esta forma evitamos posibles errores de escrituras 0 lecturas sobre descriptores ya cetrados. Cerrar sockets. En la parte del cliente wy salida.close (); miCliente.close (); { Catch (IOException e) ( System. out.printin (€) ; } En la parte del servidor try { ‘salida.close (); entrada.close (); socketServicio close (); miCliente.close (); {Catch (IOException e) System.out.printin (e); } Desarrollo del lado del servidor con socket. En la parte del servidor: public final class java.net ServerSocket extends java.lang.Object Constructores public ServerSocket (int port) throws IOException Se crea un socket local al que se enlaza el puerto especificado en el pardmetro port, si se especifica un 0 en dicho parémetro creara el socket en cualquier puerto disponible. Puede aceptar hasta 50 peticiones en cola pendientes de conexién por parte de los clientes, public ServerSocket (int port , int count) throws IOException Aqui, él pardmetro count sirve para que puede es pectficarse, el nimero maximo dé peticiones de conexion que se pueden mantener en cola. Hay que recordar, que es fundamental que el puerto escogido sea conocido por el dliente, en caso contrario, no se podria establecer la conexién. Métodos: public Socket accept () throws IOException Sobre un ServerSocket se puede realizar una espera de conexién por parte del cliente mediante el método accept (). Hay que decir, que este métado es de bloqueo, el proceso espera a que se realice una conexién por parte del cliente para seguir su ejecucién. Una vez que se ha establecido una conexién por el cliente, este método devolverd Un objeto tipo Socket, a través del cual se establecerd la comunicacién canel cliente public: void close () throws IOException Se encarga de cerrar el socket public InetAddress getInetAddress () Retoma la direecién IP remota a la cual esta conectado el socket. Si no lo est retornaré null public int getLocalPort () Retomna el puerto en el que esta escuchando el socket public static void setSocketImplFactory (SocketimplFactory fac) throws IOException Este método establece 1a compafia de implementacién del socket para la aplicaciin. Debido a que cuando una aplicacién crea un nuevo socket, se realiza una lamada al método createSocketimpl () de la compafiia que implementa al sacket. Es por tanto en el pardmetro fac, donde se especficara la citada compania. public String toString() Retorna un string representando el socket. En la parte del cliente: public final class java.net Socket extends java-lang.Object Constructores: public Socket (InetAddress address, int port) throws IOException Grea un StreamSocket y lo conecta al puerto remato y direccién IP remota especificada, public Socket (InetAddress address, int port , boolean stream) throws 1OException idem a la anterior incluyendo el parametro booleano stream que si es true crearaun StreamSocket y si es false un DatagramSocket (En desuso). public Socket (String host, int port) throws UnKnownHostException, 1OException Grea un StreamSocket y lo conecta al numero de puerto y al nombre de host especificados. public Socket (String host, int port , boolean stream) throws IOException idem al anterior incluyendo ¢l parametro booleano stream que si es true creara un StreamSocket y'si es false un DatagramSocket (En desuso). Métodos: public void close() throws IOException Se encarga de certar el socket. public InetAddress getinetAddress () Retorna la direccidn IP remota a la que se conecta el socket. public InputStream getinputStream () throws IOException Retorna un input stream para la lectura de bytes desde el socket public int getLocalPort() Retorna el puerto local al que esta conectado el socket. public OutputStream getOutputStream () throws IOException Retorna un output stream para la escritura de bytes hacia el socket. public int getPort () Retoma el puerto remoto al que esta conectado el sacket. public static void setSocketImplFactory (SocketlmplFactory fac) throws IOException Este método establece la compaiiia de implementacién del socket para la aplicacién. Debido a que cuando una aplicacién crea un nuevo socket, se realiza una llamada al método createSocketImpl( ) de la compaiia que implementa al socket. Es por tanto en el parametro fac , donde espectficaremos la citada compafia. Conclusién. Finalmente cuando se conoce el concepto adecuado de socket, se puede mencionar laimportancia en esta en el desarrollo de programas que hagan peticiones y reciban, las misma peticiones en el servidor, estén ono en la misma red, es decir que se ‘vuelven como un tipo de recursos compartidos, ya que cada nado cliente haria una peticién especitica al servidor yeste accederia a sus recursos y en caso de que no Io tuviera al aleance mandaria una excepcién.

Potrebbero piacerti anche