PDF de programación - Programación en Internet (Sockets)

Imágen de pdf Programación en Internet (Sockets)

Programación en Internet (Sockets)gráfica de visualizaciones

Publicado el 10 de Junio del 2021
590 visualizaciones desde el 10 de Junio del 2021
293,0 KB
23 paginas
Creado hace 9a (15/01/2015)
Programación en Internet

(Sockets)

Programación con Sockets
Objetivo: aprender como construir aplicaciones

cliente/servidor que se comunican utilizando sockets

Socket API


introducida en el BSD4.1
UNIX, 1981

• explicitamente creada,

utilizada, por aplicaciones
paradigma cliente/servidor

• dos tipos de servicio de
transporte via el API de
socket:

– datagrama no fiable

– flujo de bytes fiable

socket

Una interfaz de aplicación

creada, tenida y

controlada por el OS (una

“puerta”) dentro de la

cual los procesos pueden
enviar y recibir mensajes

a/desde otro proceso

(remoto o local).

1

Sockets en UNIX

• Una forma de comunicarse con otro proceso

usando descriptores de ficheros estándares
(recordar: todo en UNIX es un fichero)

• Como todo descriptor de ficheros es un int

BSD socket

INET socket

TCP/UDP

Appletalk

IPX

IP

3

(Link)

(Physical)

Struct sockaddr

• Almacena información de la dirección del socket
struct sockaddr {

unsigned short sa_family;
char sa_data[14];

// address family, AF_xxx
// 14 bytes of protocol address

};



Familia de direcciones soportadas (include/linux/socket.h)

– UNIX
– INET
– AX25
– IPX
– APPLETALK
– X25

Unix domain sockets
TCP/IP
Amateur radio
Novell IPX
Appletalk
X.25

• Mas; unas 24 en total



Para INET, sa_family = AF_INET

2

Network Byte Order vs. Host Byte Order

• Existen dos formas de ordenar los bytes:

– El más significativo primero: Network Byte Order o "Big-Endian Byte

Order"

– El menos significativo primero: Host Byte Order o “Little-Endian Byte

Order"

• Se puede convertir de un orden a otro usando las funciones:

– htons()

: Host to Network short

– htonl()

: Host to Network long

– ntohs()

: Network to Host short

– ntohl()

: Network to Host long

• Siempre debe convertirse los datos a Network Byte Order

antes de enviarlos por la red

Struct sockaddr_in

• Sockaddr para TCP / IP

struct sockaddr_in {

short int sin_family;

// Address family

unsigned short int sin_port;

// Port number

struct in_addr sin_addr;

// Internet address

unsigned char sin_zero[8];

// Same size as struct sockaddr

};

• A un puntero a struct sockaddr_in puede hacérsele casting a struct

sockaddr y viceversa





sin_family se corresponde con sa_family en struct sockaddr

sin_port y sin_addr deben estar en Network Byte Order

5

6

3

struct in_addr sin_addr

• Dirección Internet (dirección IP)

struct in_addr {

unsigned long s_addr; // that’s a 32-bit long, or 4 bytes

};

• De esta forma si se declara ina del tipo type struct sockaddr_in, entonces

ina.sin_addr.s_addr referencia la dirección IP de 4 bytes (en Network
Byte Order).

7

Programación de Sockets utilizando

Socket: una puerta entre procesos de aplicación y el

TCP en Java

protocolo de transporte extremo a extremo (UCP o
TCP)

Servicio TCP: trasnferencia fiable de bytes desde un

proceso a otro

Controlado por el
desarrollador de
la aplicación

Controlado por el
sistema operativo

proceso

socket
TCP con
buffers,
variables

host o
servidor

internet

Controlado por el
desarrollador de
la aplicación

Controlado por el
sistema operativo

proceso

socket
TCP con
buffers,
variables

host o
servidor

4

Sockets

Aplicación

Presentación

Sesión

Transporte

Red

Enlace

Física

Aplicación

Presentación

Sesión

Transporte

Red

Enlace

Física

OSI Model, DoD Model and TCP/IP Protocol Suit

DoD: Department of Defense

5

Programación de Sockets utilizando

TCP

El cliente debe contactar al

servidor

 El proceso servidor debe correr

primero

 El servidor debe haber creado

algún socket (puerta) que reciba
conexiones de clientes

El cliente contacta al servidor

mediante:

 Crear un socket TCP local al

cliente

 Especificar la dir. IP, el puerto

del proceso servidor

 Cuando el cliente crea un socket: el
cliente TCP establece una conexión
al servidor TCP

 Cuando el servidor es contactado

por un cliente, el servidor TCP crea
un nuevo socket para que el proceso
servidor se comunique con el cliente
permite que el servidor hable con
múltiples clientes

Punto de vista de la aplicación
El TCP provee de una
transferencia de bytes (“pipe”)
fiable y en orden entre el
clienteyelservidor

Programación de Sockets utilizando
TCP

keyboard

monitor

Ejemplo aplicación cliente-

servidor:

• El cliente lee una línea de la

entrada estándar (inFromUser
stream) , y la envía al servidor
vía el socket (outToServer
stream)

• El servidor lee la línea del

desde el socket

• El servidor convierte la línea en
mayusculas y la envía al cliente

• El cliente lee e imprime la línea

modificada desde el socket
(inFromServer stream)

input
stream

r
e
s
U
m
o
r
F
n

i

Proceso
Process
Cliente

flujo de salida:
Secuencia de bytes
hacia fuera del
proceso

output
stream

flujo de entrada:
Secuencia de
bytes hacia dentro
del proceso

r
e
v
r
e
S
o
T
u
o

t

input
stream

r
e
v
r
e
S
m
o
r
F
n

i

client TCP

clientSocket

socket

TCP
socket

to network

from network

6

Interacción cliente/servidor con Socket

Servidor (corriendo sobre hostid)

Cliente

TCP

create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()

TCP

inicio de conexión

Esperando por
solicitud de conexión
connectionSocket =
welcomeSocket.accept()

Lee solicitud de
connectionSocket

Escribe respuesta a
connectionSocket

cierra
connectionSocket

crea socket,
connect to hostid, port=x
clientSocket =
Socket()

envía solicitud en
clientSocket

Lee contestación en
clientSocket

cierra
clientSocket

Programación de Sockets con UDP

Punto de vista de la aplicación

UDP provee una transferencia no

fiablede grupos de bytes

(datagramas) entre el cliente y el

servidor

UDP: sin “conexión” entre el

cliente y el servidor



sin handshaking (saludo)

• El emisor asocia

explicitamente la dir. IP y
el puerto del destinatario

• El servidor debe extraer

del datagrama recibido, la
dir. IP y el puerto del
emisor

UDP: los datos transmitidos
pueden ser recibidos fuera
de orden, o se pueden
perder

7

Interacción cliente/servidor de sockets

Servidor (corriendo en hostid)

Cliente

UDP

crea socket,
port=x, para
solicitud entrante:
serverSocket =
DatagramSocket()

Lee solicitud desde
serverSocket

Escribe respuesta a
serverSocket
especificando la dir. del
hots y el num. de puerto

crea socket,
clientSocket =
DatagramSocket()

crea, dirección (hostid, port=x)
Envía datagrama de petición
utilizando clientSocket

Lee respuesta en
clientSocket

cierra
clientSocket

Ejemplo: cliente (UDP)

keyboard

monitor

input
stream

Proceso
Process
Cliente

salida: envía paquete
(TCP envía “flujo
de bytes”)

UDP
packet

r
e
s
U
m
o
r
F
n

i

t

e
k
c
a
P
d
n
e
s

entrada: recibe
paquete (TCP
recibe “flujo de
bytes”)

t

e
k
c
a
P
e
v
e
c
e
r

i

UDP
packet

client UDP

clientSocket

socket

UDP
socket

to network

from network

8

Sockets

• Protocolos de Transporte:

 XNS
 TCP/IP
 UNIX

• Tipos de Servicios

 Datagramas: SOCK_DGRAM
 Circuitos Virtuales:

• SOCK_STREAM
• SOCK_SECPACKED
• Especiales: SOCK_RAW

Sockets

• Un socket está caracterizado por 5

parámetros :
 Una familia de protocolos
 La dirección IP de la máquina local
 El puerto de la capa de transporte
 La dirección IP de la máquina remota
 El puerto de la capa de transporte remota

• Los cinco parámetros arriba mencionados

son necesarios para establecer una
comunicación.

9

Sockets: Llamados al Sistema

socket

bind

listen

accept

connect

send/write

recv/read

sendto

recvfrom

select

close

Crea un socket del tipo especificado (Stream, Datagrama, o Especial).

Asocia una dirección IP, un puerto de la capa de transporte y una familia
de protocolos.

Crea una cola de peticiones de conexión.

Acepta una petición de conexión solicitada por un cliente. En caso de no
existir se duerme en espera de una. Al salir crea un socket completo.

Invita a establecer conexión con un socket remoto perteneciente a un
servidor .

Envía datos a través del socket (circuitos virtuales)

Recibe datos a través del socket (circuitos virtuales)

Envía datos a través del socket (datagramas)

Recibe datos a través del socket (datagramas)

Revisa el estado de varios sockets abiertos para lectura ó escritura

Termina la conexión en un socket.

Sockets: Escenario Típico de

Comunicación (Serv. Sin conexión)

SERVIDOR

socket()

bind()

recvfrom()

<petición>

sendto()

close()

<respuesta>

CLIENTE

socket()

bind()

sendto()

recvfrom()

close()

10

Sockets: Escenario Típico de Comunicación

(Serv. Orientado a Conexión)

SERVIDOR

socket()

bind()

listen()

accept()

recv()

send()

close()

CLIENTE

socket()

connect()

send()

recv()

close()

Fase

Establecimiento

De Conexión

Fase

Intercambio

Fase

Desconexión

Sockets: Servidor Concurrente

Clientes

Servidores

C1

C2

Cn

S1

S2

Sn

Vigía

11

Sockets: Servidor Concurrente

(a) Cliente y Servidor solicitan un socket al sistema

socket()

(b) El Servidor se asocia a un puerto conocido

bind()

Sockets: Servidor Concurrente

(c) El Servidor reserva cola de espera e indica que está listo y

se bloquea esperando conexiones (pasivo)

listen()
accept()

(d) El Cliente solicita conexión a la dirección bien conocida

del Servidor. El sistema le asigna un puerto libre.

connect()

12

Sockets: Servidor Concurrente

(e) Al aceptar la conexión, el Servidor crea un nuevo socket que

le heredará al proceso de atención

(f) El Servidor crea un nuevo proceso que atenderá la petición

fork()

Sockets: Servidor Concurrente

(g) El proceso hijo cierra el socket de petición de servicio

y ofrece el servicio a través del nuevo socket.

(h) Por su parte, el padre cierra el nuevo socket y regresa

a esperar una nueva conexión.

13

Anexo: Ejemplos de programas con

Sockets

En este anexo se presentan ejemplos de programas
cliente-servidor. Los servicios son:

con
 Servicio
minúsculas a mayúsculas

eco

de

transformación

de
  • Links de descarga
http://lwp-l.com/pdf19293

Comentarios de: Programación en Internet (Sockets) (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