PDF de programación - Introducción a la programación con sockets en C

Imágen de pdf Introducción a la programación con sockets en C

Introducción a la programación con sockets en Cgráfica de visualizaciones

Publicado el 17 de Marzo del 2019
1.046 visualizaciones desde el 17 de Marzo del 2019
100,9 KB
37 paginas
Creado hace 16a (26/02/2008)
Introducción a la programación con sockets en C

Introducción a la programación con

sockets en C

Enrique Bonet

Departamento de Informática

Universidad de Valencia



Introducción a la programación con sockets en C

Índice

• Introducción
• Socket
• Creación de un socket
• Cierre de un socket
• Asociación de un socket a un puerto
• Diferencias entre TCP y UDP
• Escucha de un puerto TCP
• Servidor TCP
• Cliente TCP
• Recepción / Envío de datos en TCP
• Recepción de datos en UDP
• Envío de datos en UDP
• Comprobación del estado de un socket



Introducción a la programación con sockets en C

Introducción

• Para que dos aplicaciones puedan intercambiar

información entre sí se necesita:
– Un protocolo de comunicación común a nivel de red y

a nivel de transporte.

– Una dirección del protocolo de red que identifique a

cada uno de los ordenadores.

– Un número de puerto que identifique la aplicación

dentro del ordenador.

Redes de computadores

3

Introducción a la programación con sockets en C

Socket (I)

• Concepto abstracto que permite intercambiar

información entre dos ordenadores.
• Se define mediante los parámetros:

– Protocolo de red y de transporte.
– Dirección de red.
– Número de puerto.

• Básicamente, es un conector que recibe peticiones

de conexión o solicita las mismas.

Redes de computadores

4

Introducción a la programación con sockets en C

Socket (II)

• Implementan una arquitectura cliente/servidor.

– Una aplicación, la aplicación servidor, permanece a la
espera de que otras aplicaciones deseen sus servicios:
• Utilizando un determinado protocolo de red y de transporte.
• En una determinada dirección de red.
• En un determinado número de puerto.

– Otra aplicación, la aplicación cliente, solicita los

servicios de la aplicación servidor:
• Utilizando el mismo protocolo de red y de transporte.
• Una dirección de red.
• Un número de puerto.

Redes de computadores

5

Introducción a la programación con sockets en C

Creación de un socket (I)

• El primer paso para que cualquier aplicación

cliente o servidor pueda comunicarse es crear un
socket.

• El valor devuelto es un entero:

– >=0 si el socket es creado correctamente.
– <0 si se produce un error en la creación.

Redes de computadores

6

• Se realiza con la función socket().
• Sus parámetros son:

– Dominio.
– Tipo.
– Protocolo.

Introducción a la programación con sockets en C

Creación de un socket (II)

• Dominio: Indica el dominio de comunicación que

se desea utilizar:
– PF_INET: Protocolos de Internet versión 4.
– PF_INET6: Protocolos de Internet versión 6.
– PF_IPX: Protocolos IPX (Novell).
– PF_APPLETALK: Protocolos Appletalk.
– PF_UNIX o PF_LOCAL: Comunicación local.

• Optimización de PF_INET para aplicaciones de uso local

(conexión entre aplicaciones del propio ordenador).

– ...

Redes de computadores

7

Introducción a la programación con sockets en C

Creación de un socket (III)

• Tipo: Tipo de comunicación deseada.

• No todos los tipos de comunicación deben estar

implementados en todos los dominios.

Redes de computadores

8

– SOCK_STREAM: Conexión bidireccional confiable

con el flujo de datos ordenados.

– SOCK_DGRAM: Mensajes no confiables, sin

conexión, con una longitud máxima fija.

– SOCK_SEQPACKET: Conexión bidireccional

confiable con el flujo de datos ordenados y
datagramas de longitud máxima fija.

– ...

Introducción a la programación con sockets en C

Creación de un socket (IV)

• Protocolo: Selección del protocolo particular que

utilizará el conector que deseamos crear.
– Generalmente un dominio y tipo solo admite un

protocolo particular, por lo que solo puede tomar el
valor 0.

– Dominio PF_INET y tipo SOCK_STREAM:

• Protocolo de transporte TCP.

– Dominio PF_INET y tipo SOCK_DGRAM:

• Protocolo de transporte UDP.

Redes de computadores

9

Introducción a la programación con sockets en C

Ejemplo (I)

#include <sys/types.h>
#include <sys/socket.h>
...
int s;
...
if ((s=socket(PF_INET,SOCK_STREAM,0))<0)
{

perror(“socket”);
exit(0);

}

Redes de computadores

10

Introducción a la programación con sockets en C

Ejemplo (II)

#include <sys/types.h>
#include <sys/socket.h>
...
int s;
...
if ((s=socket(PF_INET,SOCK_DGRAM,0))<0)
{

perror(“socket”);
exit(0);

}

Redes de computadores

11

Introducción a la programación con sockets en C

Cierre de un socket

• Es el último paso cuando se quiere cerrar una

conexión.

• El modo de cierre es independiente del dominio,

tipo o protocolo que utilice el socket.
• Se realiza con la función close().
• Sus parametros son:

– Descriptor del socket a cerrar.

• Devuelve:

– 0 si cierra el socket.
– <0 si se produce un error.

Redes de computadores

12

Introducción a la programación con sockets en C

Ejemplo

#include <unistd>
...
int s;
...
if (close(s)<0)
{

perror(“socket”);
exit(0);

}

Redes de computadores

13

Introducción a la programación con sockets en C

Asociación de un socket a un puerto (I)

• Todo socket que actúe como servidor debe

asociarse a un puerto.
– El cliente necesita conocer en que puerto se encuentra

disponible el servicio para dirigirse al mismo.
• Puerto 21 TCP: FTP (Transferencia de archivos).
• Puerto 22 TCP: SSH (Conexión segura).
• Puerto 25 TCP: SMTP (Correo electrónico).
• Puerto 80 TCP: HTTP (Web).
• Puerto 443 TCP: HTTPS (Web segura).
• Puerto 53 UDP: DNS (Servidor de nombres).
• Puerto 123 UDP: NTP (Sincronización de la hora).

Redes de computadores

14

Introducción a la programación con sockets en C

Asociación de un socket a un puerto (II)

• Se realiza con la función bind().
• Su sintaxis es:

#include <sys/types.h>
#include <sys/socket.h>
...
int bind(int sockfd, struct sockaddr
*addr,int addrlen);

• struct sockaddr no se utiliza, se utiliza en su lugar

struct sockaddr_in:
– Necesidad de incluir la cabecera:

#include <netinet/in.h>

Redes de computadores

15

Introducción a la programación con sockets en C

Asociación de un socket a un puerto (III)

• sockfd: Socket creado con anterioridad.
• addr: Puntero a la estructura sockaddr_in

convertida a sockaddr mediante una conversión
forzada de tipo (cast).

• addrlen: Tamaño de la estructura apuntada por el

puntero addr.

• Devuelve:

– 0 si sucede correctamente.
– <0 si ocurre un error.

Redes de computadores

16

Introducción a la programación con sockets en C

Asociación de un socket a un puerto (IV)

• La estructura sockaddr_in tiene los campos:

struct in_addr
{

unsigned long int s_addr;

};
struct sockaddr_in
{

int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;

};

Redes de computadores

17

Introducción a la programación con sockets en C

Asociación de un socket a un puerto (V)

• Donde:

– sin_family: Protocolo de comunicación del socket,
debe corresponder con el que se uso para crear el
socket.

– sin_port: Puerto al que se asocia el socket.
– sin_addr.s_addr: Dirección de red en la que se pone a

la escucha el socket (127.0.0.1, 147.156.1.1, etc.).
• Si se desea que escuche todas las direcciones de red del

ordenador se utiliza la constante INADDR_ANY.

Redes de computadores

18

Introducción a la programación con sockets en C

Ejemplo

...
int s;
struct sockaddr_in dir;
...
dir.sin_family=PF_INET;
dir.sin_port=htons(puerto);
dir.sin_addr.s_addr=htonl(INADDR_ANY);

if (bind(s, (struct sockaddr *)&dir,



sizeof(struct sockaddr_in))!=0)

{

}

perror("bind");
exit(0);

Redes de computadores

19

Introducción a la programación con sockets en C

Diferencias entre TCP y UDP
Servidor

Crear

Asociar

Escuchar

Aceptar

Cliente

Crear

Pedir

Enviar/Recibir

Cerrar

Redes de computadores

20

Introducción a la programación con sockets en C

Escucha de un puerto TCP

• Un socket TCP asociado a una dirección y puerto
es puesto en escucha con la función listen().

• Sus parámetros son:

– Descriptor del socket a poner a la escucha.
– Tamaño de la cola de aceptación de peticiones.

• Devuelve:

– 0 si se ejecuta de forma correcta.
– <0 si se produce un error.

Redes de computadores

21

Introducción a la programación con sockets en C

Ejemplo

...
int s;
...

if (listen(s, 5)!=0)
{

perror("listen");
exit(0);

}

Redes de computadores

22

Introducción a la programación con sockets en C

Servidor TCP (I)

• Acepta las peticiones de conexión con

accept().

• Sus parámetros son:

– Socket asociado a la dirección y puerto y puesto a la

escucha.

– Estructura que contendrá la dirección y puerto del

cliente del que se acepta la conexión.

– Puntero al tamaño de la estructura.

Redes de computadores

23

Introducción a la programación con sockets en C

Servidor TCP (II)

• Valor devuelto:

– >=0 Identificador del socket donde se ha aceptado la

conexión.
• Al aceptar una conexión se crea un nuevo socket que es el

que atiende la conexión.

• El socket original que escuchaba la dirección y puerto
permanece inalterado después de aceptar la conexión.

– <0 Error en la aceptación de la conexión.

Redes de computadores

24

Introducción a la programación con sockets en C

Ejemplo

...
int sock, sock_conectado, tam;
struct sockaddr_in dir;
...
tam=sizeof(struct sockaddr_in);

if ((sock_conectado=accept(sock, (struct

sockaddr *)&dir, &tam))<0)

{

}

perror("accept");
exit(0);

Redes de computadores

25

Introducción a la programación con sockets en C

Cliente TCP

• Solicita la conexión mediante connect().
• Sus parámetros son:

– Descriptor del socket que se utiliza para la conexión.
– Estructura con la dirección y puerto al que se desea

conectarse.

– Longitud de la estructura anterior.

• Valor devuelto:

– 0 si la conexión se realiza de forma correcta.
– <0 si se produce un error.

Redes de computadores

26

Introducción a la programación con sockets en C

Ejemplo

...
int sock;
struct sockaddr_in dir;
...
dir.sin_family=PF_INET;
dir.sin_port=htons(13);
if (inet_aton("147.156.1.1",&dir.sin_addr)==0)
{

perror("inet_aton");
exit(0);

}

if (connect(sock, (struct s
  • Links de descarga
http://lwp-l.com/pdf15528

Comentarios de: Introducción a la programación con sockets en C (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad