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??