Diferencia entre revisiones de «Prácticas con scokets»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página creada con «= 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 cli…»)
 
Línea 27: Línea 27:
 
Unha posible saída sería:
 
Unha posible saída sería:
  
−
== Enunciado 5 - ==
+
== Enunciado 5 - Conectannd con servidor e porto indicado ==
−
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.
+
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
  
−
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
+
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])
−
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 ==
 
== Enunciado 6 - Factorial ou Fibonacci ==

Revisión del 13:46 14 nov 2021

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 - Conectannd 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 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

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 -

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