Buenas, he realizado el siguiente código:
import java.net.*;
import java.io.*;
public class ejercicio53cliente
{
int puertoLocal;
DatagramSocket socket;
InetAddress ipLocal;
public ejercicio53cliente(int puertoLocal) throws Exception{
this.puertoLocal = puertoLocal;
ipLocal = InetAddress.getLocalHost();
socket = new DatagramSocket(puertoLocal, ipLocal);
}
public static void main(String args[]) throws Exception
{
char eleccion;
int salir;
DatagramPacket p;
System.out.println("\t****Bienvenido a su cliente de mensajería UDP****");
System.out.println("0- Salir");
System.out.println("1- Enviar mensaje");
System.out.println("2- Recibir mensaje");
System.out.println("Seleccione la opción que desee realizar:");
eleccion=(char) System.in.read();
//lee un carácter desde el teclado que se queda en el buffer hasta que se pulsa ENTER
System.in.read();//Cuando presionamos Enter permite avanzar.
switch (eleccion)//Sentencia Switch
{
case '0':
System.out.println("¿Desea salir? Introduzca un 1 si lo desea: ");
salir=System.in.read();//Lee el número que introduzca el usuario
if(salir==1){
System.exit(0);
}
break;
case '1':
ejercicio53cliente cl = new ejercicio53cliente(2000);
System.out.println("\tIntroduzca el texto a enviar al servidor:\n");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader inv = new BufferedReader(isr);
String parrafo;
parrafo = inv.readLine();
inv.close();
System.out.println("Introduzca la IP destinataria del mensaje: \n");
String ip;
ip = inv.readLine();
inv.close();
byte data[]=parrafo.getBytes();
InetAddress destino = InetAddress.getByName(ip);
p=new DatagramPacket(data,data.length,destino,3000);
cl.socket.send(p);
cl.socket.close();
break;
case '2':
cl = new ejercicio53cliente(3000);
String texto;
p=new DatagramPacket(new byte[100],100);
cl.socket.receive(p);
cl.socket.close();
texto = new String(p.getData());
System.out.println(texto);
break;
}
}
}
Cuyo enunciado es:
Diseñe una aplicación cliente que sea capaz de leer líneas de texto desde el
teclado ininterrumpidamente, y que envíe esa información a otro computador a
través de UDP.
La aplicación terminará cuando la línea leída sea la palabra "fin".
Pues bien, compilo sin problemas y cuando me dispongo a dar a la opción 1, enviar mensaje... me deja escribir el mensaje y al dar a enter... me da error la linea:
Después de salir la petición de ip.
¿Podéis decirme por qué? Gracias.
Por cierto, si quisiera hacer lo mismo, pero leyendo un fichero de .txt y enviandolo al destino y que este lo lea (con el case 2) y lo guarde, ¿cómo se podría hacer? Creo que sería implementar una línea similar a la siguiente, pero no estoy seguro:
//Definimos un lugar de donde van a entrar todos los carácteres que llamaremos inv
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader inv = new BufferedReader(isr);
String parrafo; //Variable de tipo cadena que usaremos para almacenar una línea de texto
FileWriter fw=new FileWriter ("anonimo.txt");
BufferedWriter inv2 = new BufferedWriter(fw);
PrintWriter anonimo= new PrintWriter (inv2); //Escribe en el fichero
do{
parrafo = inv.readLine(); //Lee una línea de texto
anonimo.println(parrafo); //Escribe la línea que ha leído en la línea de código anterior
//Le indicamos que mientras parrafo no sea igual a fin, continué
}while(!parrafo.equalsIgnoreCase("fin"));
anonimo.close();
Un cable por favor, lo antes posible.