Aplikacja składa się z dwóch elementów, serwera i klienta. Serwer nasłuchuje na zdefiniowany porcie komendy. Klient wysyła do serwera komendy. Poniższy przykład użycia tego rozwiązania do zdalnego zamknięcia komputera (linux).
import java.io.*;
import java.net.*;
public class CommandListner
{ public static int port ;
private ServerSocket server;
private String command;
public CommandListner(){
}
public void start()
{
try
{
server = new ServerSocket(this.port);
}
catch (Exception err)
{
System.out.println("ssss"+err);
}
try
{
while (true)
{
Socket client = server.accept();
BufferedReader r = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter w = new PrintWriter(client.getOutputStream(), true);
do
{
try
{
command = r.readLine();
System.out.println("command: "+ command);
Process pro = Runtime.getRuntime().exec(command) ;
if ( command != null ) System.exit(0);
}
catch (IOException e)
{
System.err.println("ioexception starting process! " + e);
}
}
while ( !command.trim().equals("bye") );
client.close();
}
}
catch (Exception err)
{
System.err.println(err);
}
}
public static void main(String[] args){
CommandListner Cmd = new CommandListner();
if(args.length==0)
Cmd.port = 9999;
else
Cmd.port = Integer.parseInt(args[0]);
Cmd.start();
}
}
import java.io.*;
import java.net.*;
/**
*
* @author marcin_mazurek
*/
public class CommandSender {
private static int port;
private static String ip, command;
public static void main(String[] args) {
if(args.length<2){
System.out.println("Usage: IP PORT COMMAND");
System.exit(0);
}
else{
ip = args[0];
port = Integer.parseInt(args[1]);
command = args[2];
}
try
{
Socket s = new Socket(ip, port);
BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter w = new PrintWriter(s.getOutputStream(), true);
BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
w.println(command);
}
catch (Exception err)
{
System.err.println(err);
}
}
}
Przykład uruchomienia programu klienta, aby wsyłać komendę "reboot".
Serwis zapisuje jedno ciasteczko techniczne, i to tylko w grze w wisielca oraz przy dopisywaniu palindromów. Pozostałe ciasteczka zakładają skrypty Google: reklamy AdSense oraz Analytics, który liczy odwiedziny. Zgodę na reklamy Google zbiera własnym oknem. Co dokładnie i po co.