Diferencia entre revisiones de «Prácticas con scokets»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 115: Línea 115:
 
:* e menor
 
:* e menor
 
:* e maior
 
:* e maior
:* acertou o número secreto
+
:* acertou o número secreto e gañou
 +
:* agotou o número de intentos (10) e perdeu
  
 
== Enunciado 8 - Operacións con menú ==
 
== Enunciado 8 - Operacións con menú ==

Revisión del 15:25 25 nov 2021

Comprendendo as diferenzas entre TCP e UDP

Enunciado 1

Busca información para cubrir a seguinte táboa respecto os seguintes protocolos de rede. Deberás indicar:

  • cales utlizan sockets UDP e cales TCP
  • cando pensas que é máis aconsellable unha ou outra solución
Protocolos de aplicación
sobre TCP ou UDP
Protocolo de aplicación TCP UDP
HTTP
FTP
SMTP
SSH
DNS
DHCP
BOOTP
Protocolos de streaming
RTP, RDT, WebRTC,...

Sockets TCP

Enunciado 1 - Envío de mensaxe

Crea un programa cliente/servidor:

  • O programa servidor envía unha mensaxe a outro programa cliente
  • O programa cliente devuelve a mensaxe recibida ó servidor.

Enunciado 2 - Duplicando número

Crea un programa cliente/servidor:

  • O programa cliente lee un entero por teclado e envíallo ó programa servidor
  • O porgrama servidor devolveralle o doble do número.
  • O cliente ten que escribir na consola tanto o número enviado como o resultado recibido (o doble).

Enunciado 3 - Convertindo a maiúsculas

Crea un programa cliente/servidor:

  • O programa cliente lee unha cadea por teclado e envíalla a un programa servidor
  • O programa servidor devolverá a cadea convertida a maiúsculas
  • O cliente ten que escribir a cadea devolta na consola

Enunciado 4 - Escaneando portos

Deseña unha sinxela aplicación en Java que:

  • escanee os portos ben coñecidos (é dicir, do porto 1 ó 1024) dun determinado host
  • indica para cada porto se está aberto (se hai algunha aplicación escoitando nese porto) ou pechado.

Para iso crearase un socket:

  • se salta a excepción IOException significa que non se puido abrir o socket nese porto polo que non hai ningún proceso escoitando nel.

Unha posible saída sería:

... comprobando portos en ...localhost
Porto: 1 pechado
Porto: 2 pechado
...
Porto: 19 pechado
Porto: 20 pechado
Porto: 21 aberto 
Porto: 22 pechado

Enunciado 5 - Conectando con servidor e porto indicado

Escribe un programa cliente en java que:

  • acepta dous parámetros de entrada por consola para establecer unha conexión: o nombre dun servidor e un número de porto ó que conectar nese servidor
  • visualiza unha mensaxe por pantalla indicando se a conexión foi estrablecida ou non.
    • con conexión establecida debe amosar o número de porto e o nome do servidor co que conectou
    • con conexión fallida debe indicar o motivo dependendo do tipo de excepción acontecida:
      • "Nome de servidor descoñecido"
      • "Non é posible realizar a conexión"
  • O constructor crea un socket TCP e intenta conectalo ó host e porto remotos especificados como parámetros
  • Se o servidor DNS non está en funcionamento ou non pode resolver o nome
    • o constructor lanzará unha excepción UnknownHostException
  • Se o nome se resolve pero o socket non pode conectar por algunha outra razón (entre outras: o porto destino no servidor non está aberto, existan problemas de encamiñamento na rede para alcanzar o destino, ou simplemente o servidor especificado esté apagado):
    • lanzarase unha excepción IOException.
  • Para facilitar a depuración o programa debe comprobar se hai parámetros de entrada

Recorda que os parámetros de entrada en Java son de tipo String e que o porto no construtor Socket é un in. Porén será preciso realizar unha conversión de tipo (cast). Deste modo, se args[1] é o parámetro correspondente ó porto, a conversión pode facerse por ejemplo así:

int porto = Integer.parseInt(args[1])

Enunciado 6 - Factorial ou Fibonacci

Crea un programa cliente/servidor:

  • O programa cliente pida un número ó usuario por teclado e unha opción (fibonacci, factorial ou sair do programa) e envíallos ó programa servidor (se non sae do programa)
  • O programa servidor devolveralle ó cliente o resultado (factorial ou fibonacci segundo a opción escollida).
  • O cliente ten que escribir o resultado na consola.

Enunciado 7 - Adiviña o número

Crear una aplicación cliente/servidor:

  • O servidor e cliente comunícanse polo porto 6000
  • O programa servidor xenera un número aleatorio (entre 0 e 100) que será secreto.
  • O programa cliente solicita ó usuario un número e envíallo ó servidor
  • O programa servidor para cada número que lle envía o cliente indicará se:
  • e menor
  • e maior
  • acertou o número secreto e gañou
  • agotou o número de intentos (10) e perdeu

Enunciado 8 - Operacións con menú

Crea unha aplicación cliente/servidor:

  • O programa cliente
    • executará un menú con varias opcións para que elixa a operación desexada
    • despois pedirá o número co que operar
    • estes datos serán enviados ó servidor que fará o cálculo preciso e devolverá ó cliente o resultado da operación escollida

Cliente:

  • Conéctase ó servidor coa IP indicada e a través do porto 7000
  • Ofrécelle ó usuario un menú cun par de opcións (calcular cadrado ou raíz cadrada, por exemplo)
  • Pídelle ó usuario que introduza unha opción e envíase ó servidor
  • Pídelle ó usuario o número co que operar e envíase ó servidor para que faga o cálculo
  • Recíbese do servidor o resultado da operación e amósase por por pantalla ó usuario
  • Executarase ata que o usuario decida terminar pulsando a opción 3
  • Entonces péchanse os fluxos creados e a conexión co servidor
  • Deben controlarse as excepcións

Servidor:

  • Crea o socket para recibir a conexión do cliente
  • Acepta a conexión do cliente
  • Recibe o tipo de operación que o cliente desexa facer
  • Recibe o número co que deberá operar e fai os cálculos precisos
  • Amosa en pantalla o que pediu o cliente
  • Envía o resultado ó cliente
  • O servidor estará escoitando ata que o cliente decida remar coa opción 3

• Se o cliente decide finalizar aa sesión, pecha os fluxos e conexións

  • Deben controlarse as excepcións

Enunciado 9 - Rocha, papel, tesoiras

Fai un xogo similar o do enunciado 7, pero neste caso en lugar de adiviñar un número, o cliente tratará de derrotar ó servidor

  • o cliente escollerá rocha, peapel ou tesoiras
  • o servidor tamén escollerá rocha, papel ou tesoiras
  • como ben e sabido, a rocha gaña ás tesoiras, as tesoiras gañánlle ó papel, e ó papel gaña á rocha
  • en caso de empate, repítse o xogo. En caso de haber un gañador, amósase quén e o gañador pola consola

Enunciado 10 - Tickets do museo naval

Crea unha aplicación cliente/servidor: TCP onde

  • o cliente envía o nombe de usuario e o tipo de entrada ó museo naval. O servidor xeneraralle un ticket no que figuren os datos do usuario e o importe.

Cliente:

  • Pide ó usuario o nome completo
  • Amosa os tipos de entrada
    • Normal: 10 €
    • Nenos: 2 €
    • Carne xove: 7 €
    • Terceira idade: 6 €

Servidor: Unha vez que ten todos os datos amosará pola súa consola unha entrada:

  • VISITANTE: Eulogio Touriño
  • TIPO DE ENTRADA: Terceira idade
  • A PAGAR: 6 €

O paso de datos do cliente ó servidor farase a través dun obxecto da clase Ticket que debes definir.

Enunciado 11 - Envio de ficheiros

Crea un programa cliente/servidor TCP:

  • que permita o envío do contido de ficheiros ó cliente
  • o cliente conectarase ó servidor polo porto 1600
  • o cliente solicitaralle o nome dun ficheiro do servidor
    • Se o ficheiro existe, o servidor enviaralle o contido do ficheiro ó cliente e este amosarao por pantalla
    • Se o ficheiro non existe, o servidor enviaralle ó cliente unha mensaxe de erro
  • Cando o cliente amose o ficheiro finalizarase a conexión.

Enunciado 12 - Cliente/Servidor de eco TCP

Crea un programa cliente/servidor TCP cun cliente que recibe unha mensaxe dun servidor e lle contesta;

  • o servidor está escoitando nun determinado porto
  • o servidor acepta a conexión do cliente, recolle a súa mensaxe e lle contesta
  • as mensaxes introdúcense por teclado ata que un deles escriba FIN (entón a conversación rematará)

Enunciado 13 - Contador de conexións

Escribe un programa que conte o número de conexions que vai recibindo:

  • disporá dun socket stream servidor
  • cada vez que un socket cliente se conecte, este enviaralle unha mensaxe co número de clientes conectados ata aora (o primer cliente que se conecte recibirá un 1, o segundo un 2, o terceiro un 3, ...)

Enunciado 14 - Servidor calculadora que atende múltiples peticións

Crea un programa cliente/servidor TCP:

  • que implemente unha calculadora (suma, resta, multiplicación e división)
  • o servidor debe poder atender a múltiples clientes de xeito simultaneo

Enunciado 15 - Chat

Sockets UDP

Enunciado 1 - Socket que responde a saúdo

Escribe un programa que responda a saúdos usando sockets datagram:

  • O programa escoitará polo socket mensaxes que conteñan a cadea de texto "Ola"
  • Cando reciba un responderá o seu emisor con outra mensaxe que conteña a cadea "Qué tal?".

Escribe outro programa adicional (cliente) para probar o funcionamiento deste: teremos un emisor (cliente, o que saluda) e un receptor (servidor, o que contesta).

Enunciado 2 - Socket intercambia token

Escribe unha parella de programas (A e B) que usen sockets datagram para intercambiar unha mensaxe chamada token:

  • O arrincar o programa A enviará unha mensaxe ó B coa palabra "token".
  • Cando o B a reciba, enviará de volta a A unha mensaxe coa palabra recibido e terminará
  • Cando A reciba a mensaxe de B terminará tamén

Enunciado 3 - Socket login

Crea un programa cliente/servidor UDP:

  • O cliente solicita ó usuario un nome de usuario e un contrasinal.
  • O servidor recibirá esa información e encargarase de comparala con dous valores de usuario e contrasinal predeterminados (por exemplo, "alumnoUcha" e "PSP"), gardados en dúas variables.
  • O servidor informará pola súa consola da coincidencia ou non coincidencia dos datos introducidos polo usuario cos mantidos nesas dúas variables

Pensas que para o envío de usuario e contrasinal é boa idea o uso de UDP? Ou sería mellor TCP? Por qué?

Solucións

  • Podes consultar posibles solucións:

Créditos e referencias