Prácticas con scokets
Sumario
- 1 Sockets TCP
- 1.1 Enunciado 1 - Envío de mensaxe
- 1.2 Enunciado 2 - Duplicando número
- 1.3 Enunciado 3 - Convertindo a maiúsculas
- 1.4 Enunciado 4 - Escaneando portos
- 1.5 Enunciado 5 -
- 1.6 Enunciado 6 - Factorial ou Fibonacci
- 1.7 Enunciado 7 - Adiviña o número
- 1.8 Eunciado 8
- 1.9 Enunciado 9 - Rocha, papel, tesoiras
- 1.10 Enunciado 10 - Tickets do museo naval
- 1.11 Enunciado 11 - Envio de ficheiros
- 1.12 Enunciado 12 - Cliente/Servidor de eco TCP
- 1.13 Enunciado 13 -
- 1.14 Enunciado 14 - Servidor calculadora que atende múltiples peticións
- 1.15 Enunciado 15 - Chat
- 2 Sockets UDP
- 3 Solucións
- 4 Créditos e referencias
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 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 orto) 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:
Enunciado 5 -
Escribe un programa cliente en java, que sea capaz de aceptar dos parámetros de entrada en línea de órdenes para establecer una conexión: el nombre de un servidor y un número de puerto al que conectar en ese servidor. El programa debe visualizar un mensaje por pantalla indicando si la conexión se ha establecido o no. En caso de éxito debe mostrar también el número de puerto y el nombre del servidor con el que ha conectado, y en caso de fallo indicar el motivo: “Nombre de servidor desconocido ” o “No es posible realizar conexión”, dependiendo el tipo de excepción ocurrida.
El constructor crea un socket TCP e intenta conectarlo al host y puerto remotos especificados como parámetros. Si el servidor DNS no está en funcionamiento o no puede resolver el nombre, el constructor lanzará una excepción UnknownHostException
Si el nombre se resuelve pero el socket no puede conectar por alguna otra razón, se lanzará una excepción IOException. Esto puede deberse, entre otras razones, a que el puerto destino en el servidor no esté abierto, existan problemas de encaminamiento en la red para alcanzar el destino o simplemente el servidor especificado esté apagado Para facilitar la depuración, el programa debe comprobar si hay parámetros de entrada.
Por otra parte, recuerda que los parámetros de entrada en Java son de tipo “String” y dado que el puerto en el constructor Socket es un “int”, es necesario realizar una conversión de tipo. De este modo, si args[1] es el parámetro correspondiente al puerto, la conversión puede hacerse, por ejemplo, como:
int puerto = 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 olicita ó usuario un número e envíallo ó servido
- O programa servidor para cada número que lle envía o cliente indicará se:
- e menor
- e maior
- acertou o número secreto
Eunciado 8
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á rcoha, 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 -
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: