260 likes | 396 Views
Sockets programming. Tipos de datos. Tipos de datos mas usados en programas cliente-servidor: u-char Unsigned 8-bit character. u-short Unsigned 16-bit integer. u-long Unsigned 32-bit integer. Internet Address Structure.
E N D
Tipos de datos. • Tipos de datos mas usados en programas cliente-servidor: • u-char • Unsigned 8-bit character. • u-short • Unsigned 16-bit integer. • u-long • Unsigned 32-bit integer.
Internet Address Structure • Las direcciones de IPv4 se definen como una estructura (struct en C). • La estructura guarda un numero binario de 32 bits (IP address). • Struct in_addr { u_long s_addr; }
SOCKETS • Un socket actua como un “end point”. Para que 2 procesos se comuniquen necesitan una estructura socket • SOCKET ADDRESS STRUCTURE: Struct sockaddr_in { u_char sin_len; u_short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero [8]; }
Campos de la estructura SOCKET • Family: IPv4, IPv6, UNIX (Grupo de protocolos). • Type: stream, datagram, raw (Tipo de socket). • Protocol: valor de 0 para TCP o UDP. • Local socket address. • Remote socket address.
Socket structure Family Type Protocol Local Socket Address Remote Socket Address
Socket Types Application Program Raw Socket. • Utilizado para aplicaciones que usan protocolos que interactuan directamente con los servicios IP (ej.- ICMP, OSPF). TCP UDP IP Physical and data link layers
SOCKET SYSTEM CALLS • Funciones definidas para llamar desde una aplicacion a otra: • Socket • Bind • Connect • Listen • Accept • Sendto • Recvfrom • Read • Write • Close
Funciones. • Socket • Esta funcion crea un socket. • Int socket (int family, int type, int protocol); • Bind • Asocia un socket con una direccion local de socket. • Int bind (int sockfd, const struct socketaddr_in *localaddr, int localaddrlen);
Funciones. • Connect • Es utilizado por un proceso para establecer una conexion activa con un proceso remoto. • Int connect (int sockfd, const struct sockaddr_in *serveraddr, int serveraddrlen); • Listen • Es utilizada unicamente por un servidor TCP. Crea un socket pasivo para un socket que aun no se conecta. • Int listen (int sockfd, int backlog);
Funciones. • Accept • La utiliza un TCP Server para remover la primera requisicion de conexion que se encuentra en la fila. • Int accept (int sockfd, const struct sockaddr_in *clientaddr, int * client addrlen); • Sendto • Es utilizada por un proceso usando UDP para enviar un mensaje hacia un proceso remoto. • Int sendto (int sockfd, const void *buf, int buflen, int flags, const struct sockaddr_in *toaddr, int toaddrlen);
Funciones. • Read • Es utilizada por un proceso para recibir datos de otro proceso remoto (se asume que ya hay una conexion abierta - TCP). • Int read (int sockfd, const void *buf, int buflen) • Recvfrom • Extrae el siguiente mensaje que llega a un socket. • Int recvfrom (int sockfd, const void *buf, int buflen, int flags, const struct sockaddr_in *fromaddr, int fromaddrlen);
Funciones. • Write • Usada por un proceso para enviar datos a un proceso remoto (se asume que ya existe conexion activa - TCP). • Int write (int sockfd, const void *buf, int buflen); • Close • Es utilizada por un proceso para cerrar un socket y terminar la conexion. • Int close (int sockfd);
Connectionless • SERVER • Opening a socket. • Binding. • Repeating the steps: • Receiving. • Sending.
Connectionless • CLIENT. • Opening a socket. • Repeating the steps: • Receiving. • Sending. • Closing.
Connection-oriented • SERVER. • Opening a socket. • Binding. • Listening. • Repeating the steps: • Accepting • Forking. • Repeating: • Reading. • Processing. • Writing. • Closing the communication socket.
Connection-oriented • CLIENT. • Opening a socket. • Connecting. • Repeating the steps: • Writing. • Reading. • Closing.
ServerSocket • Al implementar un servidor necesitamos crear un objeto socket llamado “ServerSocket” para escuchar y aceptar conexiones de clientes.
Input Stream • Se utiliza la clase DataInputStream. Para crear un stream del lado del cliente:
Input Stream • La clase DataInputStream permite leer lineas de texto y tipo de datos primitivos de Java. Se pueden utilizar metodos como: read, readChar,readInt,readDouble, y readLine,. • Para recibir un stream del lado del servidor:
Output Stream • En el cliente se crea un output stream para enviar datos al servidor con las clases PrintStream or DataOutputStream de java.io.
Server output • En el servidor se pueden utilizar las mismas clases para enviar informacion al cliente. • Ejemplo con “PrintStream”:
Bibliografia y sitios recomendados. • Programacion en Java: • http://www.javaworld.com/javaworld/jw-12-1996/jw-12-sockets-p2.html • Socket Programming HOWTO (phyton) • http://www.amk.ca/python/howto/sockets/
An Introduction to Socket Programming - C. • http://www.uwo.ca/its/doc/courses/notes/socket/ • Sockets Programming. • http://www.scit.wlv.ac.uk/~jphb/comms/sockets.html