1-Programacion Con Sockets en Linux
1-Programacion Con Sockets en Linux
UNAN-León
APLICACIONES TELEMÁTICAS
León, Nicaragua
Introducción
Estas aplicaciones van desde los correos de solo texto, hasta las aplicaciones
multimedia de hoy en día.
Los protocolos de la capa de transporte son TCP y UDP, cada uno de los
cuales ofrece un servicio diferente.
Para que un proceso pueda enviar un mensaje a otro proceso situado en una
máquina remota, se necesitan:
Canal de comunicación
1. Protocolo, dirección local, proceso local, dirección remota, proceso
remoto.
2. Como un cable que une dos procesos.
API de sockets
• Proporciona estructuras de datos y funciones para la programación de
aplicaciones distribuidas.
Establecimiento del canal: socket()
Parámetros
1. sockfd: identificador socket devuelto por la función socket().
2. direccion: estructura que contiene el puerto y la dirección IP locales
3. longitud = sizeof (direccion)
4. Devuelve -1 en caso de error
Establecimiento del canal: bind()
struct in_addr {
u_long s_addr; /* dirección IP */
}
Establecimiento del canal: bind()
Uso de bind()
1. Obligatorio en el proceso servidor:
Informa al sistema operativo de que todo el tráfico recibido
en un determinado puerto le corresponde.
longitud1 = sizeof(servidor);
Ordenación de bytes
1. unsigned long htonl (x) /* h->n long */
2. unsigned short htons (x) /*h->n short */
3. unsigned long ntohl (x) /* n->h long */
4. unsigned short ntohs (x) /* n->hshort */
Cierre del canal: close()
Parámetros
sockfd: descriptor devuelto por socket().
Modo No Orientado a Conexión UDP
Parámetros:
1. sockemisor: descriptor socket origen
2. mensg: datos del datagrama
3. lgmensg: longitud (n° bytes) datos
4. lgdest = sizeof (destino)
5. opcion: 0
6. destino: estructura sockaddr_in que contiene el puerto y la dirección IP
recvfrom(): recibe
datos de un cliente
recvfrom(): recibe
datos de un servidor
Modo Orientado a Conexión TCP
Parámetros:
ds: descriptor socket servidor (socket escucha).
backlog: número máximo de conexiones (incompletas o establecidas).
Valor recomendado: 5.
Depende del tipo de servidor (concurrente, iterativo) y de la carga
a que esté sometido (servidores muy cargados se recomienda 16).
Parámetros:
ds: descriptor socket cliente.
Bind automático. Si no se especifican la dirección y el puerto del
cliente, el kernel toma por defecto la dirección local y un puerto
local libre.
destino: estructura sockaddr_in que contiene el puerto y la dirección IP
del servidor.
lgdest = sizeof (destino).
Parámetros:
ds: descriptor socket servidor
cliente: estructura sockaddr_in en la que el servidor obtiene el puerto y
la dirección IP del cliente.
lgcli = sizeof (cliente), inicializada.
Parámetros:
ds: descriptor socket.
buff: dirección del mensaje que se envía.
longitud: longitud del mensaje que se envía.
Parámetros:
ds: descriptor socket.
buff: dirección donde se guarda el mensaje recibido.
longitud: longitud memoria reservada para guardar el mensaje.