Diferencia entre revisiones de «Solucións as prácticas con Sockets UDP»
Ir a la navegación
Ir a la búsqueda
(Página creada con «== 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…») |
|||
| Línea 94: | Línea 94: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | Cuestións. Coa solución proposta: | + | '''Cuestións'''. Coa solución proposta: |
a) Qué acontece cando o cliente envía como saúdo Ola? E cando envía calquera outro texto? | a) Qué acontece cando o cliente envía como saúdo Ola? E cando envía calquera outro texto? | ||
Con Ola, o servidor segue a escoita. Con calquera outro texto, o servidor finaliza. | Con Ola, o servidor segue a escoita. Con calquera outro texto, o servidor finaliza. | ||
b) Qué acontece se primeiro se lanza o cliente e despois o servidor? | b) Qué acontece se primeiro se lanza o cliente e despois o servidor? | ||
| + | Non funcionará! | ||
== Enunciado 2 - Socket intercambia token == | == Enunciado 2 - Socket intercambia token == | ||
Revisión del 15:20 14 nov 2021
Sumario
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).
Solución 1
Servidor:
1 import java.io.*;
2 import java.net.*;
3 public class ServidorSaudo {
4 public static void main(String args[]) throws Exception {
5 //Porto polo que escoita o servidor: 9876
6 DatagramSocket serverSocket = new DatagramSocket(9876);
7 byte[] recibidos = new byte[1024];
8 byte[] enviados = new byte[1024];
9 String cadea;
10
11 while(true) {
12 System.out.println ("Esperando datagrama ... ");
13 //Recibo dagragama
14 recibidos = new byte[1024];
15 DatagramPacket paqRecibido = new DatagramPacket(recibidos, recibidos.length);
16 serverSocket.receive(paqRecibido);
17 cadea = new String(paqRecibido.getData());
18
19 //Enderezo orixe
20 InetAddress IPOrixe = paqRecibido.getAddress();
21 int porto = paqRecibido.getPort();
22 /*System.out.println ("\tOrixe: " + IPOrixe + ":" + porto);*/
23 System.out.println ("\tMensaxe recibida: " + cadea.trim());
24
25 //Cadea a devolver
26 String respuesta = "Qué tal?";
27 enviados = respuesta.getBytes();
28
29 //Envío datagrama ó cliente
30 DatagramPacket paqEnviado = new DatagramPacket(enviados, enviados.length, IPOrixe, porto);
31 serverSocket.send(paqEnviado);
32
33 //Para terminar
34 if(!cadea.trim().equals("Ola")) break;
35 }
36 serverSocket.close() ;
37 System.out.println ("Socket pechado ... ");
38 }
39 }
Cliente:
1 import java.io.*;
2 import java.net.*;
3 public class ClienteSaudo {
4 public static void main(String args[]) throws Exception {
5 //Fluxo para entrada estándar
6 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
7
8 DatagramSocket clientSocket = new DatagramSocket();//socket cliente
9 byte[] enviados = new byte[1024];
10 byte[] recibidos = new byte[1024];
11
12 // Datos do servidor ó que enviar a mensaxe
13 InetAddress IPServidor = InetAddress.getLocalHost() ;// localhost
14 int porto = 9876; // porto polo que escoita
15
16 String cadea = "Ola";
17 enviados = cadea.getBytes();
18
19 //Enviando datagrama ó servidor
20 System.out.println("Enviando " + enviados.length + " bytes ó servidor.");
21 DatagramPacket envio = new DatagramPacket(enviados, enviados.length, IPServidor, porto);
22 clientSocket.send(envio) ;
23
24 // Recibindo datagrama do servidor
25 DatagramPacket recibo = new DatagramPacket(recibidos, recibidos.length);
26 System.out.println("Esperando datagrama ... ");
27 clientSocket.receive(recibo);
28 //Recibe la resposta
29 String resposta = new String(recibo.getData());
30
31 //Obtendo información do datagrama
32 /*InetAddress IPOrixe = recibo.getAddress();
33 int portoOrixe = recibo.getPort();
34 System.out.println("\tProcedente de: " +IPOrixe + ":" + portoOrixe);*/
35 System.out.println("\tDatos: " + resposta.trim());
36 clientSocket.close();//pechar socket
37 }
38 }
Cuestións. Coa solución proposta: a) Qué acontece cando o cliente envía como saúdo Ola? E cando envía calquera outro texto? Con Ola, o servidor segue a escoita. Con calquera outro texto, o servidor finaliza. b) Qué acontece se primeiro se lanza o cliente e despois o servidor? Non funcionará!
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é?