Integer.parseInt() lanza java.lang.NumberFormatException

En este ejercicio tengo que introducir una cadena con cuatro números separados por un espacio, mandarlo al servidor, luego el servidor sumará el primero más el segundo, luego multiplicarlo por el tercero y finalmente restarle el cuarto. El resultado lo mandará de vuelta al cliente. De nuevo el cliente mandará otros cuatro números. El proceso se repetirá hasta que el cliente mande un *, en ese caso el servidor se cierra (mandando una “x” como respuesta para que el cliente también se cierre). Hay que hacerlo utilizando UDP.

Pues el problema es que le mando una cadena al servidor, luego este la transforma en array con método split, y luego para poder operar con estos números tengo que pasarlos a int, con Integer.parseInt(). Y ahí es donde viene el problema, que me da un error con la excepción NumberFormatException.

Código cliente:

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 {      public static void main(String[] args) throws Exception {          String cadena;               BufferedReader in = new BufferedReader(new InputStreamReader(System.in));                                DatagramSocket clientSocket = new DatagramSocket();          byte[] listData = new byte[1024];                byte[] datosEnviados = new byte[1024];         byte[] datosRecibidos = new byte[1024];           InetAddress IPServidor = InetAddress.getByName(//aquí pondre mi dirección IP);          int puerto = 6000;                   while(true) {              System.out.println("Introduce 4 números separados por un espacio en blanco: ");             cadena = in.readLine();               listData = cadena.getBytes();              DatagramPacket envio = new DatagramPacket(listData, listData.length, IPServidor, puerto);             clientSocket.send(envio);                         //recibimos respuesta del servidor             DatagramPacket recibo = new DatagramPacket(datosRecibidos, datosRecibidos.length);             System.out.println("Esperando datagrama...");             clientSocket.receive(recibo);             String numero = new String(recibo.getData());                                     if (numero.equals("x")) {                 break;                        }                     System.out.println("\t Datos: " + numero);                } //Fin While          clientSocket.close(); //Cerramos cliente     }  } 

Código servidor:

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 {      public static void main(String args[]) throws Exception {          DatagramSocket serverSocket = new DatagramSocket(6000);         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) {              System.out.println("Esperando datagrama...");                         infoRecibida = new byte[1024];             DatagramPacket paqRecibido = new DatagramPacket(infoRecibida, infoRecibida.length);             serverSocket.receive(paqRecibido);                  cadena = new String(paqRecibido.getData());           // IP y puerto desde donde se manda mensaje             InetAddress IPOrigen = paqRecibido.getAddress();             int puerto = paqRecibido.getPort();               String[] numeros = cadena.split(" ");             n1 = Integer.parseInt(numeros[0]);             n2 = Integer.parseInt(numeros[1]);             n3 = Integer.parseInt(numeros[2]);             n4 = Integer.parseInt(numeros[3]);              num1= Integer.toString(n1);             num2= Integer.toString(n2);             num3= Integer.toString(n3);             num4= Integer.toString(n4);              // 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();                 DatagramPacket paqueteFinal = new DatagramPacket(paquete, paquete.length, IPOrigen, puerto);                 break;             }              //Hago las operaciones, el resultado lo paso a cadena y luego a bytes, para ser enviado al cliente             res=(n1+n2)*n3-n4;             num = Integer.toString(res);                                   infoEnviada=num.getBytes();               // ENVIO DATAGRAMA AL CLIENTE             DatagramPacket paqEnviado = new DatagramPacket(infoEnviada, infoEnviada.length, IPOrigen, puerto);             serverSocket.send(paqEnviado);          } //Fin While           serverSocket.close();         System.out.println("Socket cerrado...");      }  } 

El error que me marca es

Exception in thread "main" java.lang.NumberFormatException: For input string: "4 at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Servidor.main(Servidor.java:43)