El problema es que al mandar los números por lo visto al servidor no le llegan dichos números y no hace nada. Cuando ejecuto el programa me pide los 4 números, los introduzco y ahí es donde se queda parado, el servidor no devuelve ningún resultado. Para guardar los números he utilizado el ArrayList numeros... el problema es el proceso para empaquetar esa lista de números en bytes, mandarlo al servidor y que este lo decodifique y lea esos números, ahí por lo visto no le llega la información al servidor. Soy un novato en esto de conexiones TCP/UDP, seguro que me habré equivocado pero no sé como solucionarlo, espero podáis orientarme un poco, porque estoy más perdido que un pulpo en un garaje.
Dejo los códigos de Servidor y Cliente, a ver si podéis decirme dónde he fallado...
Código
import java.awt.List; import java.io.ByteArrayInputStream; import java.io.ObjectInputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.ArrayList; public class Servidor { byte[] infoRecibida = new byte[1024]; byte[] infoEnviada = new byte[1024]; byte[] paquete = new byte[1024]; String cadena; List list; int n1,n2,n3,n4; int res; String num; String num1,num2,num3,num4; String x; while (true) { infoRecibida = new byte[1024]; serverSocket.receive(paqRecibido); // IP y puerto desde donde se manda mensaje int puerto = paqRecibido.getPort(); //Estas dos lineas supuestamente serían para poder leer el arraylist enviado desde el cliente, aunque igual estoy equivocado ArrayList<Integer> numeros = (ArrayList<Integer>)inputStream.readObject(); n1 = numeros.get(0); n2 = numeros.get(1); n3 = numeros.get(2); n4 = numeros.get(3); // Si alguno de los números introducidos es * // envío "x" al cliente para que este se cierre, posteriormente sale del bucle y se cierra también el servidor if (num1=="*"||num2=="*"||num3=="*"||num4=="*") { x = "x"; paquete = x.getBytes(); break; } //Hago las operaciones, el resultado lo paso a cadena y luego a bytes, para ser enviado al cliente res=(n1+n2)*n3-n4; infoEnviada=num.getBytes(); // ENVIO DATAGRAMA AL CLIENTE serverSocket.send(paqEnviado); } //Fin While serverSocket.close(); } }
Código
import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.ArrayList; public class Cliente { String cadena; //para recibir y enviar datos byte[] datosEnviados = new byte[1024]; byte[] datosRecibidos = new byte[1024]; InetAddress IPServidor = InetAddress.getByName(...); //En el paréntesis iría el número de ip del servidor adonde quiero mandarlo int puerto = 6000; ArrayList<Integer> numeros = new ArrayList<>(); while(true) { //Rellenamos ArrayList numeros for(int i=0; i<4;i++) { cadena = in.readLine(); } //Empaquetamos ArrayList en bytes para poder enviarlo al servidor outputStream.writeObject(numeros); byte[] listData = out.toByteArray(); clientSocket.send(envio); outputStream.close(); //recibimos respuesta del servidor clientSocket.receive(recibo); //Si el dato que devuelve el servidor es "x", salimos del bucle y se cierra el cliente if (numero.equals("x")) { break; } } //Fin While clientSocket.close(); //Cerramos cliente } }
Mod: Obligatorio el uso de etiquetas GeSHi para sources.