Transcript Filminas.

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
• 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
u_short
u_short
struct in_addr
char
}
sin_len;
sin_family;
sin_port;
sin_addr;
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
TCP
UDP
IP
Physical and data link layers
Raw Socket.
• Utilizado para aplicaciones que usan protocolos que interactuan
directamente con los servicios IP (ej.- ICMP, OSPF).
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
1. Opening a socket.
2. Binding.
3. Repeating the steps:
1. Receiving.
2. Sending.
Connectionless
•
CLIENT.
1. Opening a socket.
2. Repeating the steps:
1. Receiving.
2. Sending.
3. Closing.
Connection-oriented
•
SERVER.
1.
2.
3.
4.
Opening a socket.
Binding.
Listening.
Repeating the steps:
1. Accepting
2. Forking.
3. Repeating:
1. Reading.
2. Processing.
3. Writing.
4. Closing the communication socket.
Connection-oriented
•
CLIENT.
1. Opening a socket.
2. Connecting.
3. Repeating the steps:
1. Writing.
2. Reading.
4. Closing.
Ejemplo en Java.
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”:
Para cerrar un socket.
Bibliografia y sitios recomendados.
• Programacion en Java:
• http://www.javaworld.com/javaworld/jw-121996/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/sock
et/
• Sockets Programming.
• http://www.scit.wlv.ac.uk/~jphb/comms/socket
s.html