I have a client socket and a server, the client sends a command to the server to run, but when the command has spaces, the server throws an exception: java.io.IOException: invalid null character in command
Server Code:
import java.io.*;
import java.net.*;
import java.io.IOException;
public class UDPServidor{
public static void main(String[] args) throws Exception{
DatagramSocket servidorSocket = new DatagramSocket(9876);
byte[] dadosRecebidos = new byte[1024];
byte[] dadosEnviados = new byte[1024];
while(true){
dadosRecebidos = new byte[1024];
dadosEnviados = new byte[1024];
DatagramPacket pacoteRecebido = new DatagramPacket(dadosRecebidos,dadosRecebidos.length);
servidorSocket.receive(pacoteRecebido);
String sentence = null;
sentence = new String(pacoteRecebido.getData());
InetAddress enderecoIP = pacoteRecebido.getAddress();
int porta = pacoteRecebido.getPort();
System.out.println("Comando Recebido = " + sentence);
Runtime run = Runtime.getRuntime();
try {
Process p = run.exec(sentence);
String line = null;
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
System.out.println("\n##Processo Finalizado.");
} catch (IOException e) {
e.printStackTrace();
}
String sentenceCapturada = sentence.toUpperCase();
dadosEnviados = sentenceCapturada.getBytes();
DatagramPacket pacoteEnviado = new DatagramPacket(dadosEnviados,dadosEnviados.length,enderecoIP,porta);
servidorSocket.send(pacoteEnviado);
}
}
}
Customer Code:
import java.io.*;
import java.net.*;
public class UDPCliente{
public static void main(String[] args) throws Exception {
BufferedReader cadeidaUsuario = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clienteSocket = new DatagramSocket();
InetAddress enderecoIP = InetAddress.getByName("localhost");
byte[] enviaDados = new byte[1024];
byte[] recebeDados = new byte[1024];
String sentence = cadeidaUsuario.readLine();
enviaDados = sentence.getBytes();
DatagramPacket enviaPacote = new DatagramPacket(enviaDados,enviaDados.length,enderecoIP,9876);
clienteSocket.send(enviaPacote);
DatagramPacket recebePacote = new DatagramPacket(recebeDados,recebeDados.length);
clienteSocket.receive(recebePacote);
String sentenceModificada = new String(recebePacote.getData());
System.out.println("Código recebido com sucesso: "+ sentenceModificada);
clienteSocket.close();
}
}