PDF de programación - Introducción al uso de sockets en Linux

Imágen de pdf Introducción al uso de sockets en Linux

Introducción al uso de sockets en Linuxgráfica de visualizaciones

Publicado el 8 de Abril del 2018
327 visualizaciones desde el 8 de Abril del 2018
268,3 KB
14 paginas
Creado hace 10a (25/04/2011)
Introduccióónn al al usouso de de
Introducci

SOCKETS en Linux
SOCKETS en Linux

Lic. Leonardo de - Matteis

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

© 2011

Interfaz de de programaci
Interfaz

programacióónn de de aplicaciones
aplicaciones

NAPI (Network Application Programming Interface)

Servicios provistos usualmente por el sistema operativo, los cuales
brindan una interface entre componentes de software en la capa de

aplicación y protocolos de red específicos.

2

1

APIs parapara comunicaci
APIs

comunicacióónn vvííaa TCP/IP
TCP/IP

NAPI (Network Application Programming Interface)

• Los protocolos de transporte TCP/UDP no incluyen la definición de
una API específica.

• Existen diversas APIs que se pueden utilizar con TCP/IP:

Sockets

Sockets (BSD: Berkeley sockets)

 TLI, XTI (AT&T UNIX System V)

 Winsock (Microsoft, pero basado en BSD sockets)

 MacTCP (Mac OS, Apple Computer)

 Open Transport (Mac OS, Apple Computer)

3

Socket: definici
Socket:

definicióónn

Representación abstracta de un punto de comunicación, que permite
establecer un canal de comunicación entre dos rutinas o programas.

• Los podemos considerar como archivos, que se crean de manera
especial.

socketstrabajan con los servicios de entrada/salida de sistemas

• Los sockets
operativos del tipo Unix.

•Diversos programas corriendo en computadoras diferentes dentro de
sockets.
una red, pueden comunicarse a través del uso de sockets

• Con las funciones write() y read() del lenguaje C, se pueden escribir
socket.
y leer datos en el socket

4

2

Sockets (BSD: Berkeley sockets)
Sockets (BSD: Berkeley sockets)

• Primera versión disponible en el Unix BSD 4.2 (1983).

• API basada en librerías, para escribir programas en C.

• Permiten escribir rutinas para la intercomunicación entre procesos.

• Brindan generalidad:

 soportan multiples familias de protocolos;

 independencia en la representación de las direcciones.

• Utiliza la interface de programación de entrada/salida existente lo
más posible.

• API standard para la utilización de sockets

socketsen redes.

• Otros lenguajes utilizan una API similar.

5

Tipos de sockets
de sockets
Tipos

sockets, los
Existen dos tipos de "canales de comunicación" o sockets
orientados a conexión y los no orientados a conexión.

Orientados a conexión (TCP):

Dos programas deben conectarse entre ellos con un socket
establecida correctamente la conexión, ninguno de los dos puede transmitir
datos. (Protocolo TCP sobre IP).

sockety hasta que no esté

Esto garantiza que todos los datos van a llegar de un programa al otro
correctamente. Se utiliza cuando la información a transmitir es importante, y no
se debe perder ningún dato.

Si uno de los programas está "ocupado" y no atiende la comunicación, el otro
quedará bloqueado hasta que el primero lea o escriba los datos en el canal.

6

3

Tipos de sockets
de sockets
Tipos

Sin conexión (UDP):

No es necesario que los programas se conecten. Cualquiera de ellos puede
transmitir datos en cualquier momento, independientemente de que el otro
programa esté "escuchando" o no.

Para esto se utiliza el protocolo UDP sobre IP, y garantiza que los datos que
lleguen sean correctos, pero no garantiza que lleguen todos.

Programas: : servidor
Programas

servidor y y cliente
cliente

Servidor: es el programa que permanece pasivo a la espera de que alguien
solicite conexión. Puede o no devolver datos.

Cliente: es el programa que solicita la conexión para enviar o solicitar datos al
servidor.

Arquitectura cliente/servidor
cliente/servidor
Arquitectura

7

8

4

Construccióónn del del server
server
Construcci

socket:
1) Creación del socket

Función: socket()

Es una llamada al sistema, esta función devuelve un descriptor de archivo, al igual
que la función open() al crear o abrir un archivo .

Durante la llamada se reservan los recursos necesarios para el punto de
comunicación, pero no se especifica nada con respecto a la dirección asociada al
mismo.

Librerías requeridas y parámetros en Linux:

9

Construccióónn del del server
server
Construcci

socket:
1) Creación del socket

Prototipo: int socket (int family, int type, int protocol);

 family: especifica la familia del protocolo (PF_INET para TCP/IP).

 type: especifica el tipo de servicio (SOCK_STREAM, SOCK_DGRAM).

 protocol: especifica el protocolo (usualmente 0, lo cual significa el protocolo por
defectopara la familia elegida).

Resultado:

La llamada al sistema socket() devuelve un descriptor (número de tipo small integer)
o -1 si se produjo un error.

El descriptor de archivo luego será usado para asociarlo a una conexión de red.

10

5

Construccióónn del del server
server
Construcci

socket:
2) Asociar una dirección al socket

función bind()

Llamada al sistema que permite asignar una dirección a un socket

socketexistente.

El sistema no atenderá a las conexiones de clientes, simplemente registra que cuando
empiece a recibirlas le avisará a la aplicación.

En esta llamada se debe indicar el número de serviciosobre el que se quiere atender.

11

Construccióónn del del server
server
Construcci

socket:
2) Asociar una dirección al socket

Prototipo: int bind (int sockfd, const struct sockaddr *myaddr, int addrlen);

 *myaddr: asigna la dirección especificada en la estructura del tipo sockaddr. En
este parámetro suele utilizarse una estructura del tipo sockaddr_in (ejemplo en
transparencia 20).

 sockfd: descriptor del socket

socketinvolucrado.

 addrlen: tamaño de la estructura en *myaddr, es decir sizeof(myaddr).

Resultado:

La llamada al sistema bind() devuelve un 0, si se produjo un error devuelve -1.

12

6

Construccióónn del del server
server
Construcci

3) Atender conexiones:

función listen()

Avisar al sistema operativo que comience a atender la conexión de red.
El sistema registrará la conexión de cualquier cliente para transferirla a la aplicación
cuando lo solicite.

Si llegan conexiones de clientes más rápido de lo que la aplicación es capaz de
atender, el sistema almacena en una cola las mismas y se podrán ir obteniendo
luego.

13

Construccióónn del del server
server
Construcci

4) Aceptar conexiones:

función accept()

Pedir y aceptar las conexiones de clientes al sistema operativo. El sistema operativo
entregará el siguiente cliente de la cola. Si no hay clientes se quedará bloqueada
hasta que algún cliente se conecte.

14

7

Construccióónn del del server
server
Construcci

5) Leer datos desde una conexión:

función read()

Recibir datos a través del descriptor del socket
socket.

El cliente y el servidor deben conocer que datos esperan recibir, y cuales deben
enviar, bajo un formato determinado.

15

16

Construccióónn del del server
server
Construcci

6) Escribir datos en la conexión:

función write()

Escribir datos a través del descriptor del socket
socket.

7) Cerrar la conexión:

función close()

Cierra el descriptor del socket
socket.

8

Construccióónn del del cliente
cliente
Construcci

socket
1) Creación del socket

función socket()

Esta función devuelve un descriptor de archivo, al igual que la función open() al crear
o abrir un archivo .

2) Conectar con el servidor:

función connect()

Iniciar/solicitar una conexión con el servido. Dicha función quedará bloqueada hasta
que el servidor acepte nuestra conexión.

Si no hay servidor que atienda, se obtendrá un código de error (-1).

Se debe especificar la dirección IP del servidor y el número de puerto (servicio) al que
se desea conectar.

Construccióónn del del cliente
cliente
Construcci

3) Conectar con el servidor:

función connect()

17

18

9

Construccióónn del del cliente
cliente
Construcci

5) Escribir datos en la conexión:

función write()

Escribir datos a través del descriptor del socket
socket.

6) Leer datos desde una conexión:

función read()

Recibir datos a través del descriptor del socket
socket.

El cliente y el servidor deben conocer que datos esperan recibir, y cuales deben
enviar, bajo un formato determinado.

7) Cerrar la conexión:

función close()

Cierra el descriptor del socket
socket.

19

Sinopsis
Sinopsis

Estructuras y variables para el servidor:

extern int errno;
extern char *sys_errlist[];

int
struct sockaddr_in server;

sockfd;

/* Estructura con datos del server */

bzero(&server, sizeof(server));
server.sin_family
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port

= AF_INET;

= htons((short) portnum);

//server.sin_addr = htonl(ipaddress); /* dirección IP específica */

20

10

Sinopsis
Sinopsis

Algoritmo básico para el servidor:

/* Obtener un descriptor de archivo para el socket */
if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {

perror ("error al querer abrir el socket\n");
exit(1);

}
/* Asociar el programa al socket */
if (bind(sockfd, (struct sockaddr*)&server, sizeof(server))) {

perror("no se pudo hacer el bind");
exit(1);

}
/* Aceptación de conexiones en modo pasivo */
if (listen(sockfd, 5) < 0) {

printf("No se puede oir en el port %d : %s\n", portnum,
sys_errlist[errno]);
exit(1);

}

.
.

close(sockfd);

Sinopsis
Sinopsis

Estructuras y variables para el cliente:

int sockfd;
struct sockaddr_in server;
struct hostent *server_host;

/* Estructura con datos del server */

bzero(&server, sizeof(server));
server.sin_family
bcopy(server_host -> h_addr,

= AF_INET;

&server.sin_addr,
server_host -> h_length);

server.sin_port = htons((short) SERVER_PORT);

21

22

11

Sinopsis
Sinopsis

Algoritmo básico para el cliente:

/* Obtener un descriptor de archivo para el socket */
if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {

perror ("error al querer abrir el socket\n");
exit(1);

}

/* connect to server, which should already be setup */
if (connect(sockfd, (struct sockaddr*) &server, sizeof(server)) < 0) {

perror(“error al querer establecer la conexión con el server");
exit(1);

}

/ * obtener datos del host a través de su nomb
  • Links de descarga
http://lwp-l.com/pdf10253

Comentarios de: Introducción al uso de sockets en Linux (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