Sockety na przykładzie aplikacji klient serwer, zdalne wysyłanie komend, JAVA

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".
java -jar "CommandSender\dist\CommandSender.jar" 127.0.0.1 9999 "reboot"
Przykład uruchomienia programu klienta, aby wsyłać komendę "halt".
java -jar "CommandSender\dist\CommandSender.jar" 127.0.0.1 9999 "halt"
Dział: