Java Runtime.getRuntime (). exec () Does not execute commands with space

1

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();

        }
 }
    
asked by anonymous 30.11.2016 / 17:10

1 answer

0

Try to 'wipe' String before executing the command:

  String sentence = null;
  sentence = new String(pacoteRecebido.getData()).trim();

It turns out that by submitting your String , it will populate the remaining 1024 bytes with empty characters!

    
30.11.2016 / 19:13