Diferencia entre revisiones de «Prácticas con scokets»
Línea 199: | Línea 199: | ||
== Enunciado 15 - Chat == | == Enunciado 15 - Chat == | ||
+ | |||
+ | == Enunciado 16 - Servidor multifío que devolve o cadrado dun número == | ||
+ | Crea un programa cliente/servidor TCP: | ||
+ | * que obteña un número do usuario | ||
+ | :* se e 0, finaliza o programa | ||
+ | :* con calquera outro número, devolve o cadrado do mesmo | ||
+ | * o servidor debe poder atender a múltiples clientes de xeito simultaneo | ||
= Sockets UDP = | = Sockets UDP = |
Revisión actual del 14:58 2 dic 2021
Sumario
- 1 Comprendendo as diferenzas entre TCP e UDP
- 2 Sockets TCP
- 2.1 Enunciado 1 - Envío de mensaxe
- 2.2 Enunciado 2 - Duplicando número
- 2.3 Enunciado 3 - Convertindo a maiúsculas
- 2.4 Enunciado 4 - Escaneando portos
- 2.5 Enunciado 5 - Conectando con servidor e porto indicado
- 2.6 Enunciado 6 - Factorial ou Fibonacci
- 2.7 Enunciado 7 - Adiviña o número
- 2.8 Enunciado 8 - Operacións con menú
- 2.9 Enunciado 9 - Rocha, papel, tesoiras
- 2.10 Enunciado 10 - Tickets do museo naval
- 2.11 Enunciado 11 - Envio de ficheiros
- 2.12 Enunciado 12 - Cliente/Servidor de eco TCP
- 2.13 Enunciado 13 - Contador de conexións
- 2.14 Enunciado 14 - Servidor calculadora que atende múltiples peticións
- 2.15 Enunciado 15 - Chat
- 2.16 Enunciado 16 - Servidor multifío que devolve o cadrado dun número
- 3 Sockets UDP
- 4 Solucións
- 5 Créditos e referencias
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
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
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
Enunciado 16 - Servidor multifío que devolve o cadrado dun número
Crea un programa cliente/servidor TCP:
- que obteña un número do usuario
- se e 0, finaliza o programa
- con calquera outro número, devolve o cadrado do mesmo
- o servidor debe poder atender a múltiples clientes de xeito simultaneo
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: