4
Martínez Venegas Mario Francisco Puerto, Socket, Cliente/Servidor Tarea # 01 1. Buscar el comando para ver los puertos activos en el equipo, ejecutar en consola en maquina conectada a Internet, y de los números mostrados decir en que clasificación están de la IANA. El comando para verificar el estado de las conexiones en nuestro ordenador es netstat. El comandos anterior sin ningún tipo de parámetro, mostrará las conexiones activas. El comando anterior seguido del parámetro –AN, mostrará las conexiones activas, además de los puertos abiertos. Podemos también conocer cualquier conexión creada con el exterior, para ello, necesitamos escribir el comando netstat seguido del parámetro –B. Abrimos cmd como administrador.

Tarea_01

Embed Size (px)

DESCRIPTION

Creación de una aplicación cliente servidor orientado a conexión

Citation preview

Page 1: Tarea_01

Martínez Venegas Mario Francisco Puerto, Socket, Cliente/Servidor 

Tarea # 01 

 

1. Buscar el comando para ver los puertos activos en el equipo, ejecutar en consola en maquina 

conectada a Internet, y de los números mostrados decir en que clasificación están de la IANA. 

 

El comando para verificar el estado de  las conexiones en nuestro ordenador es netstat. El 

comandos anterior sin ningún tipo de parámetro, mostrará las conexiones activas. 

 

 

 

 

 

 

 

 

El comando anterior seguido del parámetro –AN, mostrará  las conexiones activas, además 

de los puertos abiertos. 

Podemos también conocer cualquier conexión creada con el exterior, para ello, necesitamos 

escribir el comando netstat seguido del parámetro –B. Abrimos cmd como administrador. 

 

 

 

 

 

Page 2: Tarea_01

Según la IANA, los puertos por los que hay una conexión activa son los siguientes y están 

reservados por la misma para uso privado: 

Puertos 49697, 49774, 50494 y 50496 

Tienen usos asignados como protocolo ARGUS, protocolo de resolución de direcciones 

(ARP), mensaje de control de internet, protocolos de internet en redes Ethernet, protocolo 

de transacción, entre muchos otros. 

2. Hacer un listado de las funciones del API de Berkeley con parámetros de los diagramas de

comunicación Orientada y No orientada a conexión.

Funciones del API de Berkeley

socket(): crea un socket nuevo de un cierto tipo, identificado por un número entero

y asigna recursos de sistema para el mismo.

bind():  es  típicamente  usado  en  el  lado  del  servidor  y  asocia  un  socket  con  una

estructura de dirección de socket, es decir, un número de puerto local especificado

y la dirección IP.

listen(): es utilizado en el lado del servidor, causa un socket TCP límite para entrar en

estado de escucha.

connect(): es usada en el lado del cliente, y asigna un numero de puerto local libre a

un socket. En caso de un socket TCP, provoca un intento para establecer una nueva

conexión TCP.

accept(): es usada en el lado del servidor. Acepta un intento entrante recibido para

crear una conexión TCP de un cliente remoto y crea un socket nuevo asociado con el

par de dirección del socket de esta conexión.

send(), recv() o write(), read() o sendto(), recvfrom(): son usadas para enviar y recibir

datos de/desde un socket remoto.

close(): hace que el sistema libere los recursos asignados a un socket. En caso de TCP,

la conexión es terminada.

Page 3: Tarea_01

gethostbyname(), gethostbyaddr(): son usadas para resolver nombres y direcciones

de host. Sólo para IPv4.

select(): es usada para hilos, esperando uno o más de una  lista proporcionada de

sockets que deben estar listos para leer, escribir o que tengan errores.

poll(): es usada para comprobar el estado de un socket en un set de sockets. El set

puede ser probado para ver si algún socket puede escribir, leer o si un error ocurrió.

getsockopt():  se  utiliza  para  recuperar  el  valor  actual  de  una  opción  de  socket

particular para el socket especificado.

setsockopt(): se utiliza para establecer una opción de socket particular para el socket

especificado.

Parámetros de las funciones para Comunicación Orientada a Conexión: 

socket(int dominio, int tipo,  int protocolo): la función socket toma tres argumentos,

el dominio, el tipo y el protocolo a usar.

bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen): la función bind

toma tres argumentos, un descriptor representando el socket para llevar a cabo el

enlace [sockfd], un puntero a una estructura sockaddr que representa  la dirección

para unirse [my_addr] y un campo socket_t especificando el tamaño de la estructura

sockaddr [addrlen].

listen(int  sockfd,  int  backlog):  la  función  listen  requiere  dos  argumentos,  un

descriptor  de  socket  válido  [sockfd]  y  un  entero  representando  el  número  de

conexiones pendientes que puede  ser puestas en  cola en  cualquier momento. El

sistema operativo usualmente  coloca un tope en este valor [backlog].

accept(  int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen):  la función accept

recibe tres parámetros, el descriptor del socket escucha que tiene la conexión puesta

[sockfd],  un  puntero  a  una  estructura  sockaddr  para  recibir  información  de  las

direcciones  del  cliente  [cliaddr]  y  un  puntero  para  una  localidad  socklen_t  que

especifica  el  tamaño  de  una  estructura  de  dirección  de  cliente  pasada  a  accept.

Cuando accept devuelve, esta localidad indica cómo cuántos bytes de la estructura

están usados actualmente [addrlen].

read(int  fd,  void  *buf,  size_t  count):  intenta  leer  hasta  contar  bytes  desde  el

descriptor de archive [fd], en donde comienza el buffer [buf].

write(int fd, const void *buf, size_t count): escribe hasta la cuenta de bytes desde el

buffer apuntado [buf] al archivo referido por el descriptor de archivo [fd].

close(int fd): cierra un archivo descriptor [fd].

Parámetros de las funciones para Comunicación No Orientada a Conexión: 

socket(int dominio, int tipo,  int protocolo): la función socket toma tres argumentos,

el dominio, el tipo y el protocolo a usar.

bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen): la función bind

toma tres argumentos, un descriptor representando el socket para llevar a cabo el

enlace [sockfd], un puntero a una estructura sockaddr que representa  la dirección

para unirse [my_addr] y un campo socket_t especificando el tamaño de la estructura

sockaddr [addrlen].

Page 4: Tarea_01

recvfrom(int  sockfd,  void  *buf,  size_t  len,  int  flags,  struct  sockaddr  *src_addr,

socklen_t  *addrlen): coloca el mensaje recibido en el buffer [buf]. El llamador debe

especificar el  tamaño del buffer en  [len]. Si  [src_addr] no es NULL, y el protocolo

subyacente proporciona la dirección de origen del mensaje, la dirección de origen se

sitúa en el buffer apuntado por [src_addr].

sendto(int  sockfd,  const  void  *buf,  size_t  len,  int  flags,  const  struct  sockaddr

*dest_addr, socklen_t addrlen): Si es usada esta función en un modo conexión  los

argumentos  [dst_addr] y  [addrlen] son  ignorados. De  lo contrario,  la dirección del

destino está dado por [dest_addr] con [addrlen] especificando su tamaño.

read(int  fd,  void  *buf,  size_t  count):  intenta  leer  hasta  contar  bytes  desde  el

descriptor de archive [fd], en donde comienza el buffer [buf].

close(int fd): cierra un archivo descriptor [fd].

3. Escribir un programa en Java donde interactúen al menos 2 clases.

Código claseUno 

Código claseDos 

Código funcionando 

FUENTES CONSULTADAShttps://en.wikipedia.org/wiki/Berkeley_sockets#socket.28.29http://man7.org/linux/man-pages/man7/socket.7.htmlhttps://norfipc.com/infografia/como-usar-netstat-conocer-conexiones-establecidas.htmlhttp://www.chuidiang.com/clinux/sockets/socketselect.phphttp://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt