PDF de programación - Apéndice: manual de sockets en c

Imágen de pdf Apéndice: manual de sockets en c

Apéndice: manual de sockets en cgráfica de visualizaciones

Publicado el 5 de Julio del 2017
859 visualizaciones desde el 5 de Julio del 2017
188,5 KB
39 paginas
Creado hace 16a (31/03/2008)
UNIVERSIDADE DA CORUÑA

Departamento de Tecnoloxías da Información



e as Comunicacións

APÉNDICE:

MANUAL DE SOCKETS EN C

Laboratorio de Redes de Comunicacións, 3er Curso
Departamento de Tecnoloxías da Información e as Comunicacións

ÍNDICE

1.
Introducción .................................................................................................19
2. Sockets en C ...............................................................................................20
2.1. Conceptos básicos ...................................................................................20
2.1.1. Dominios de comunicación ................................................................20
2.1.2. Tipos de sockets................................................................................20
2.1.3. Ordenación de los bytes ....................................................................21
2.2. Creación de un socket..............................................................................22
2.3. Función bind() ..........................................................................................23
2.4. Estructuras de datos ................................................................................23
2.4.1. Asignación de valores........................................................................25
2.5. Servicio orientado a conexión (TCP)........................................................26
2.6. Servicio no orientado a conexión (UDP)...................................................27
2.7. Funciones orientadas a conexión.............................................................27
2.8. Funciones no orientadas a conexión........................................................30
2.9. Funciones de cierre de sockets................................................................32
2.10. Otras funciones ......................................................................................33
Información adicional...................................................................................34
3.1. Función socket .........................................................................................34
3.2. Funciones inet ..........................................................................................37
3.3. Funciones htonl, htons, ntohl, ntohs.........................................................39
3.4. Función bind.............................................................................................40
3.5. Función accept .........................................................................................42
3.6. Función connect .......................................................................................43
3.7. Función listen ...........................................................................................45
3.8. Funciones send y sendto..........................................................................46
3.9. Funciones recv y recvfrom .......................................................................48
3.10. Función close .........................................................................................52
3.11. Función shutdown ..................................................................................53
3.12. Función gethostbyname .........................................................................53

3.



18

Laboratorio de Redes de Comunicacións, 3er Curso
Departamento de Tecnoloxías da Información e as Comunicacións

1. Introducción

Los sockets constituyen una interfaz de entrada-salida que permite la
comunicación entre diferentes procesos. Esto no es un aspecto novedoso si
no se tiene en cuenta que los procesos pueden estar ejecutándose en la
máquina o en distintos sistemas, unidos mediante una red.
Por lo tanto, los sockets permiten la comunicación entre varios procesos que
pueden estar ejecutándose en diferentes máquinas.
Los sockets para TCP/IP permiten la comunicación de dos procesos que
estén conectados a través de una red TCP/IP. En una red de este tipo, cada
máquina está identificada por medio de su dirección IP (tal como se observa
en la siguiente figura), aunque por comodidad se les asignan nombres a cada
una de las máquinas. En cada máquina se están ejecutando múltiples
procesos simultáneamente, algunos de los cuales se estarán comunicando a
través de la red. Cada uno de estos procesos se asocia con un número de
puerto, para poder así diferenciar los distintos paquetes que reciba la
máquina.

Número de

puerto: 17382

Número de
puerto: 7839

alba/10.10.20.11

deza/10.10.20.15



Un socket se identifica unívocamente por: dirección IP + número de puerto.
Una comunicación entre sockets se identifica unívocamente mediante:
identificador de socket origen + identificador de socket destino.

La mayoría de los lenguajes de programación actuales disponen de una
interfaz adecuada para la programación de sockets. En concreto, en este



19

Laboratorio de Redes de Comunicacións, 3er Curso
Departamento de Tecnoloxías da Información e as Comunicacións

manual se ofrece una introducción al manejo de sockets en el lenguaje de
programación C.

2. Sockets en C

2.1. Conceptos básicos

2.1.1. Dominios de comunicación

Los sockets se crean dentro de lo que se denomina un dominio de
comunicación, al igual que un archivo se crea dentro de un sistema de
ficheros concreto. El dominio de comunicación permite definir en donde se
encuentran los procesos que se van comunicar.
Los dominios que se definen en el lenguaje C son los siguientes:

• AF_UNIX: representa el dominio característico de los procesos que se
comunican en un mismo sistema UNIX.
• AF_INET: es el dominio que utilizan los procesos que se comunican a
través de cualquier red TCP/IP.
• Otros dominios: en función del sistema a emplear se definen otros
tipos de dominios.

Destacar que en esta introducción únicamente se hará referencia a sockets
creados bajo el dominio AF_INET.

2.1.2. Tipos de sockets

En el dominio AF_INET se definen los siguientes tipos de sockets:

• Sockets Stream
• Sockets Datagram
• Sockets Raw

El tipo de sockets Stream hace uso del protocolo TCP (protocolo de la capa
de transporte) que provee un flujo de datos bidireccional, orientado a
conexión, secuenciado, sin duplicación de paquetes y libre de errores.

El tipo de sockets Datagram hacen uso del protocolo UDP (protocolo de la
capa de transporte), el cual provee un flujo de datos bidireccional, no
orientado a conexión, en el cual los paquetes pueden llegar fuera de
secuencia, puede haber pérdidas de paquetes o pueden llegar con errores.



20

Laboratorio de Redes de Comunicacións, 3er Curso
Departamento de Tecnoloxías da Información e as Comunicacións


El tipo de sockets Raw permiten un acceso a más bajo nivel, pudiendo
acceder directamente al protocolo IP del nivel de Red. Su uso está mucho
más limitado ya que está pensado principalmente para desarrollar nuevos
protocolos de comunicación, o para obviar los protocolos del nivel de
transporte.

2.1.3. Ordenación de los bytes

La forma en la que se almacena los bytes en memoria puede variar de un
sistema a otro, en incluso, puede variar del sistema a la red.
Existen dos formas de almacenar un byte en memoria:

• En la posición más alta se almacena el bit más significativo.
• En la posición más alta se almacena el bit menos significativo.

Para evitar problemas a la hora de enviar y recibir datos a través de la red es
necesario convertir los datos a enviar al formato de la red al enviar, y al
formato de la máquina al recibir datos. Para esto existen las siguientes
funciones de conversión:

• htons() - host to network short: convierte un short int de formato de
máquina al formato de red.
• htonl() - host to network long: convierte un long int de formato de
máquina al formato de red.
• ntohs() - network to host short: convierte un short int de formato de
red al formato de máquina.
• ntohl() - network to host long: convierte un long int de formato de red
al formato de máquina.

Puede ser que el sistema donde se este programando almacene los datos en
el mismo formato que la red, por lo que no sería necesario realizar ninguna
conversión, pero al tratar de compilar y ejecutar el mismo código en un
sistema con diferente ordenación el resultado es impredecible.
Ejemplo:
#include <netinet/in.h>
...
port = htons ( 3490 );
...



21

Laboratorio de Redes de Comunicacións, 3er Curso
Departamento de Tecnoloxías da Información e as Comunicacións
2.2. Creación de un socket
Los sockets se crean llamando a la función socket(), que devuelve el
identificador de socket que es de tipo entero (es equivalente al concepto de
identificador de fichero).
En caso de que se haya producido algún error durante la creación del socket,
la función devuelve -1 y la variable global errno se establece con un valor que
indica el error que se ha producido. La función perror(“...”) muestra por
pantalla un mensaje explicativo sobre el error que ha ocurrido.

El formato de la función socket() es el siguiente:

sockfd = socket ( int dominio, int tipo, int protocolo );
sockfd: Identificador de socket. Que luego se utilizara para conectarse,
recibir conexiones, enviar y recibir datos, etc.
dominio: Dominio donde se realiza la conexión. En este caso, el dominio
será siempre AF_INET.
tipo: Se corresponde con el tipo de socket que se va a crear, y puede tomar
los siguientes valores (definidos como constantes en las librerías):
SOCK_STREAM, SOCK_DGRAM o SOCK_RAW.
protocolo: Indica el protocolo que se va a utilizar. El valor 0 indica que
seleccione el protocolo más apropiado (TCP para SOCK_STREAM, UDP
para SOCK_DGRAM).

A continuación se muestra un ejemplo de utilización:
#include <sys/types.h>
#include <sys/socket.h>
....
int sockfd;
sockfd =socket ( AF_INET, SOCK_STREAM, 0 )
  • Links de descarga
http://lwp-l.com/pdf4892

Comentarios de: Apéndice: manual de 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