Monoserver usando Socket

0 respostas
fajohann

Boa noite!
Estou com uma dúvida, criei um monoserver usando socket e o cliente quando conecta, ao executar determinado comando, deveria pegar alguma informação do servidor como data e hora, etc. Até ai tudo tranquilo, mas se eu na maquina cliente por exemplo digitar “S” ou “Shutdown” gostaria que a minha maquina se desligasse com os comandos vindos do servidor. Alguem poderia me dar uma dica de como fazer? Segue em anexo parte do código que já está pronto.

Por enquanto o cliente se conecta via telnet.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servidor;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;

/**
*
* @author fajohann
*/
public class Main {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        ServerSocket server = null;
        Runtime r = Runtime.getRuntime();
        Process p = null;
        try {

            System.out.println("Ativando o Servidor...");
            server = new ServerSocket(7777); // Porta e BackLog (fila espera)
            System.out.println("Aguardando Conexões...");
            Socket sock = server.accept();

            System.out.println("Conectado!" + sock.getInetAddress());

            PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));


            out.println("\nBem Vindos ao XXXX Server\n" +
                        "\rdigite help para ajuda ou digite quit para sair.");


            String cmd = "XXXX";
            while (!cmd.equalsIgnoreCase("q")) {
                cmd = in.readLine();
                if(cmd.equalsIgnoreCase("help") || cmd.equalsIgnoreCase("h")){

                    out.println("Os comandos com Suporte são:\n" +
                                "\rh - help      Mostra as opcoes\n" +
                                "\rq - quit      Fecha a conexao\n" +
                                "\rt - time      Mostra a hora atual\n" +
                                "\rs - shutdown  Desliga o Computador\n" );
                               

                }

                System.out.println("Recebido: " + cmd);
                if(cmd.equalsIgnoreCase("t") || cmd.equalsIgnoreCase("time")){
                     Calendar agora = Calendar.getInstance();
	   	    // horas, minutos e segundos
                    int horas = agora.get(Calendar.HOUR);
                    int minutos = agora.get(Calendar.MINUTE);
                    int segundos = agora.get(Calendar.SECOND);
	            out.println("Hora Atual: " + horas + ":" + minutos + ":" + segundos);
                 
                }
                if(cmd.equalsIgnoreCase("s") || cmd.equalsIgnoreCase("shutdown")){
                    try {
                         p = r.exec("cmd.exe /c shutdown -s -t 10 ");
                         out.println("Desligando");
                         p.waitFor();
                      } catch (IOException ex) {
                      out.println("Erro na execucao do comando:\n" + ex.getMessage());
                      } catch (InterruptedException ex) {
                        ex.printStackTrace();
                      }
                                 
                }

              
            out.flush();
            sock.close();
            server.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Alguém pode me dar uma dica??

Criado 28 de agosto de 2009
Respostas 0
Participantes 1