рд╡рд┐рдВрдбреЛрдЬ рдХреНрд▓рд╛рдпрдВрдЯ-рд╕рд░реНрд╡реНрд╣рд░ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд▓рд┐рд╣рд┐рдгреЗ, рднрд╛рдЧ 01

рдЕрднрд┐рд╡рд╛рджрди.

рдЖрдЬ рдорд▓рд╛ рдХреНрд▓рд╛рдпрдВрдЯ-рд╕рд░реНрд╡реНрд╣рд░ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд╛рдпрдЪреА рдЖрд╣реЗ рдЬреА рдорд╛рдирдХ рд╡рд┐рдВрдбреЛрдЬ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬрдЪреА рдХрд╛рд░реНрдпреЗ рдХрд░рддрд╛рдд, рдЬрд╕реЗ рдХреА рдЯреЗрд▓рдиреЗрдЯ, рдЯреАрдПрдлрдЯреАрдкреА, рдЗрдЯреНрд╕ рд╕реЗрдЯреЗрд░рд╛, рдЖрдгрд┐ рд╢реБрджреНрдз Java рдордзреНрдпреЗ. рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ рдХреА рдореА рдХрд╛рд╣реАрд╣реА рдирд╡реАрди рдЖрдгрдгрд╛рд░ рдирд╛рд╣реА - рдпрд╛ рд╕рд░реНрд╡ рдЙрдкрдпреБрдХреНрддрддрд╛ рдПрдХ рд╡рд░реНрд╖рд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд│ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдпрд░рдд рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдорд╛рдЭрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рд╣реБрдб рдЕрдВрддрд░реНрдЧрдд рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рд╣реЗ рд╕рд░реНрд╡рд╛рдВрдирд╛рдЪ рдард╛рдКрдХ рдирд╛рд╣реА.

рдпрд╛ рдХрдЯ рдЕрдВрддрд░реНрдЧрдд рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓ рдирдХреНрдХреА рдХрд╛рдп рдЖрд╣реЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рддреЗ рдбреНрд░реЕрдЧ рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд╣рд┐рддреА рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдореА рдлрдХреНрдд рдЯреЗрд▓рдиреЗрдЯ рд╕рд░реНрд╡реНрд╣рд░рдмрджреНрджрд▓ рд▓рд┐рд╣реАрди, рдкрд░рдВрддреБ рдпрд╛рдХреНрд╖рдгреА рдЗрддрд░ рдЙрдкрдпреБрдХреНрддрддрд╛рдВрд╡рд░ рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреАрд▓ рдЖрд╣реЗ - рддреА рдорд╛рд▓рд┐рдХреЗрдЪреНрдпрд╛ рдкреБрдвреАрд▓ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдЕрд╕реЗрд▓.

рд╕рд░реНрд╡ рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЗрд▓рдиреЗрдЯ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп, рддреЗ рдХрд╢рд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрд╢рд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рд╣реЗ рд╢реЛрдзрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореА рд╢рдмреНрджрд╢рдГ рд╕реНрддреНрд░реЛрдд рдЙрджреНрдзреГрдд рдХрд░рдгрд╛рд░ рдирд╛рд╣реА (рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдореА рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рдордЧреНрд░реАрдЪреА рд▓рд┐рдВрдХ рдЬреЛрдбреЗрди), рдореА рдлрдХреНрдд рдЕрд╕реЗ рдореНрд╣рдгреЗрди рдХреА рдЯреЗрд▓рдиреЗрдЯ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░ рджреВрд░рд╕реНрде рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░, рддреНрдпрд╛рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЗрдереЗрдЪ рд╕рдВрдкрддреЗ (рд╕рд░реНрд╡реНрд╣рд░ рдкреЛрд░реНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдореА рдореБрджреНрджрд╛рдо рдореМрди рдкрд╛рд│рд▓реЗ; рддреНрдпрд╛рдмрджреНрджрд▓ рдирдВрддрд░ рдЕрдзрд┐рдХ). рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдХреНрд▓рд╛рдпрдВрдЯрд╡рд░ рдПрдХ рдУрд│ рд╕реНрд╡реАрдХрд╛рд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рддреА рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рддрд┐рд╕рд╛рдж рд╡рд╛рдЪрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬрд░ рдПрдЦрд╛рджреА рдЕрд╕реЗрд▓ рддрд░ рддреА рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдкрд░рдд рджреНрдпрд╛ рдЖрдгрд┐ рддреЗ рд╕реНрдХреНрд░реАрдирд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛, рдХрд┐рдВрд╡рд╛, рддреНрд░реБрдЯреА рдЕрд╕рд▓реНрдпрд╛рд╕, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдХрд╛рд╣реАрддрд░реА рдЪреБрдХреАрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдХрд│реВ рджреНрдпрд╛.

рд╡рд░реАрд▓ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдЖрдореНрд╣рд╛рд▓рд╛ 2 рдХрд╛рд░реНрдпрд░рдд рд╡рд░реНрдЧ рдЖрдгрд┐ рдХрд╛рд╣реА рдЪрд╛рдЪрдгреА рд╡рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рдЬреНрдпрд╛рддреВрди рдЖрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд░ рд▓реЙрдиреНрдЪ рдХрд░реВ рдЖрдгрд┐ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдХреНрд▓рд╛рдпрдВрдЯ рдХрд╛рд░реНрдп рдХрд░реЗрд▓.
рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдпрд╛рдХреНрд╖рдгреА рдЕрд░реНрдЬрд╛рдЪреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрдд рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:

  • рдЯреЗрд▓рдиреЗрдЯрдХреНрд▓рд╛рдпрдВрдЯ
  • рдЯреЗрд▓рдиреЗрдЯрдХреНрд▓рд╛рдпрдВрдЯ рдЯреЗрд╕реНрдЯрд░
  • рдЯреЗрд▓рдиреЗрдЯ рд╕рд░реНрд╡реНрд╣рд░
  • рдЯреЗрд▓рдиреЗрдЯрд╕рд░реНрд╡реНрд╣рд░ рдЯреЗрд╕реНрдЯрд░

рдЪрд▓рд╛ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдХрдбреЗ рдЬрд╛рдКрдпрд╛:

рдЯреЗрд▓рдиреЗрдЯрдХреНрд▓рд╛рдпрдВрдЯ

рдпрд╛ рд╡рд░реНрдЧрд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдЬреНрдЮрд╛ рдкрд╛рдард╡рдгреЗ рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рд╕рд╛рдж рджрд░реНрд╢рд╡рдгреЗ рд╣реЗ рд╕рд░реНрд╡ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рд╛рд╡реЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд┐рдореЛрдЯ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд (рд╡рд░ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ) рдкреЛрд░реНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ рдХрд╛рд░реНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЧреЗрд▓реА:

рдПрдХ рдлрдВрдХреНрд╢рди рдЬреЗ рд╕реЙрдХреЗрдЯ рдЕреЕрдбреНрд░реЗрд╕ рд╡рд┐рддрд░реНрдХ рдореНрд╣рдгреВрди рдШреЗрддреЗ, рдХрдиреЗрдХреНрд╢рди рдЙрдШрдбрддреЗ рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╡рд╛рд╣ рд╕реБрд░реВ рдХрд░рддреЗ (рд╕реНрдЯреНрд░реАрдо рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд░ рдШреЛрд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рд╕рдВрдкреВрд░реНрдг рд╕реНрддреНрд░реЛрдд рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдЖрд╣реЗрдд).

 public void run(String ip, int port)
    {
        try {
            Socket socket = new Socket(ip, port);
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            Scanner keyboard = new Scanner(System.in);
            reader = new Thread(()->read(keyboard, sout));
            writer = new Thread(()->write(sin));
            reader.start();
            writer.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

рд╕рдорд╛рди рдлрдВрдХреНрд╢рди рдУрд╡реНрд╣рд░рд▓реЛрдб рдХрд░рдгреЗ, рдбреАрдлреЙрд▓реНрдЯ рдкреЛрд░реНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ - рдЯреЗрд▓рдиреЗрдЯрд╕рд╛рдареА рд╣реЗ 23 рдЖрд╣реЗ


    public void run(String ip)
    {
        run(ip, 23);
    }

рдлрдВрдХреНрд╢рди рдХреАрдмреЛрд░реНрдбрд╡рд░реАрд▓ рд╡рд░реНрдг рд╡рд╛рдЪрддреЗ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕реЙрдХреЗрдЯрд╡рд░ рдкрд╛рдард╡рддреЗ - рдЬреЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрдкреВрд░реНрдг рдЖрд╣реЗ, рд░реЗрдЦрд╛ рдореЛрдбрдордзреНрдпреЗ, рд╡рд░реНрдг рдореЛрдбрдордзреНрдпреЗ рдирд╛рд╣реА:


    private void read(Scanner keyboard, OutputStream sout)
    {
        try {
            String input = new String();
            while (true) {
                input = keyboard.nextLine();
                for (char i : (input + " n").toCharArray())
                    sout.write(i);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

рдлрдВрдХреНрд╢рди рд╕реЙрдХреЗрдЯрдордзреВрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рдЖрдгрд┐ рд╕реНрдХреНрд░реАрдирд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ


    private void write(InputStream sin)
    {
        try {
            int tmp;
            while (true){
                tmp = sin.read();
                System.out.print((char)tmp);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

рдлрдВрдХреНрд╢рди рдбреЗрдЯрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдЖрдгрд┐ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рди рдерд╛рдВрдмрд╡рддреЗ


    public void stop()
    {
        reader.stop();
        writer.stop();
    }
}

рдЯреЗрд▓рдиреЗрдЯ рд╕рд░реНрд╡реНрд╣рд░

рдпрд╛ рд╡рд░реНрдЧрд╛рдордзреНрдпреЗ рд╕реЙрдХреЗрдЯрдордзреВрди рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ, рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдкрд╛рдард╡рдгреЗ рдЖрдгрд┐ рдХрдорд╛рдВрдбрдХрдбреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд░рдд рд╕реЙрдХреЗрдЯрд╡рд░ рдкрд╛рдард╡рдгреЗ рдЕрд╢реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрд╛рдгреВрдирдмреБрдЬреВрди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рддрдкрд╛рд╕рдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдкреНрд░рдердо, "рдмреЙрдХреНрд╕реНрдб рдЯреЗрд▓рдиреЗрдЯ" рдордзреНрдпреЗ рджреЗрдЦреАрд▓ рд╕рд░реНрд╡реНрд╣рд░ рдбрд┐рд╕реНрдХрдЪреЗ рд╕реНрд╡рд░реВрдкрди рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рдпрд╛ рд▓реЗрдЦрд╛рддреАрд▓ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪрд╛ рдореБрджреНрджрд╛ рддрддреНрддреНрд╡рддрдГ рд╡рдЧрд│рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рддреЗрдереЗ рдирд╛рд╣реА. рдПрдирдХреНрд░рд┐рдкреНрд╢рди рдХрд┐рдВрд╡рд╛ SSL рдмрджреНрджрд▓ рдПрдХ рд╢рдмреНрдж.

рдлрдХреНрдд 2 рдлрдВрдХреНрд╢рдиреНрд╕ рдЖрд╣реЗрдд (рддреНрдпрд╛рдкреИрдХреА рдПрдХ рдУрд╡реНрд╣рд░рд▓реЛрдб рдЖрд╣реЗ), рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╣реА рдлрд╛рд░ рдЪрд╛рдВрдЧрд▓реА рдкреНрд░рдерд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдпрд╛ рдХрд╛рд░реНрдпрд╛рдЪреНрдпрд╛ рд╣реЗрддреВрдВрд╕рд╛рдареА, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЬрд╕реЗ рдЖрд╣реЗ рддрд╕реЗ рд╕реЛрдбрдгреЗ рдорд▓рд╛ рдпреЛрдЧреНрдп рд╡рд╛рдЯрд▓реЗ.

 boolean isRunning = true;
    public void run(int port)    {

        (new Thread(()->{ try {
            ServerSocket ss = new ServerSocket(port); // ╤Б╨╛╨╖╨┤╨░╨╡╨╝ ╤Б╨╛╨║╨╡╤В ╤Б╨╡╤А╨▓╨╡╤А╨░ ╨╕ ╨┐╤А╨╕╨▓╤П╨╖╤Л╨▓╨░╨╡╨╝ ╨╡╨│╨╛ ╨║ ╨▓╤Л╤И╨╡╤Г╨║╨░╨╖╨░╨╜╨╜╨╛╨╝╤Г ╨┐╨╛╤А╤В╤Г
            System.out.println("Port "+port+" is waiting for connections");

            Socket socket = ss.accept();
            System.out.println("Connected");
            System.out.println();

            // ╨С╨╡╤А╨╡╨╝ ╨▓╤Е╨╛╨┤╨╜╨╛╨╣ ╨╕ ╨▓╤Л╤Е╨╛╨┤╨╜╨╛╨╣ ╨┐╨╛╤В╨╛╨║╨╕ ╤Б╨╛╨║╨╡╤В╨░, ╤В╨╡╨┐╨╡╤А╤М ╨╝╨╛╨╢╨╡╨╝ ╨┐╨╛╨╗╤Г╤З╨░╤В╤М ╨╕ ╨╛╤В╤Б╤Л╨╗╨░╤В╤М ╨┤╨░╨╜╨╜╤Л╨╡ ╨║╨╗╨╕╨╡╨╜╤В╤Г.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            Map<String, String> env = System.getenv();
            String wayToTemp = env.get("TEMP") + "tmp.txt";
            for (int i :("Connectednnr".toCharArray()))
                sout.write(i);
            sout.flush();

            String buffer = new String();
            while (isRunning) {

                int intReader = 0;
                while ((char) intReader != 'n') {
                    intReader = sin.read();
                    buffer += (char) intReader;
                }


                final String inputToSubThread = "cmd /c " + buffer.substring(0, buffer.length()-2) + " 2>&1";


                new Thread(()-> {
                    try {

                        Process p = Runtime.getRuntime().exec(inputToSubThread);
                        InputStream out = p.getInputStream();
                        Scanner fromProcess = new Scanner(out);
                        try {

                            while (fromProcess.hasNextLine()) {
                                String temp = fromProcess.nextLine();
                                System.out.println(temp);
                                for (char i : temp.toCharArray())
                                    sout.write(i);
                                sout.write('n');
                                sout.write('r');
                            }
                        }
                        catch (Exception e) {
                            String output = "Something gets wrong... Err code: "+ e.getStackTrace();
                            System.out.println(output);
                            for (char i : output.toCharArray())
                                sout.write(i);
                            sout.write('n');
                            sout.write('r');
                        }

                        p.getErrorStream().close();
                        p.getOutputStream().close();
                        p.getInputStream().close();
                        sout.flush();

                    }
                    catch (Exception e) {
                        System.out.println("Error: " + e.getMessage());
                    }
                }).start();
                System.out.println(buffer);
                buffer = "";

            }
        }
        catch(Exception x) {
            System.out.println(x.getMessage());
        }})).start();

    }

рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд░реНрд╡реНрд╣рд░ рдкреЛрд░реНрдЯ рдЙрдШрдбрддреЛ, рдХрдорд╛рдВрдб рдПрдВрдб рдХреЕрд░реЗрдХреНрдЯрд░ рд╕рдореЛрд░ рдпреЗрдИрдкрд░реНрдпрдВрдд рддреНрдпрд╛рддреАрд▓ рдбреЗрдЯрд╛ рд╡рд╛рдЪрддреЛ, рдХрдорд╛рдВрдб рдирд╡реАрди рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдкрд╛рд╕ рдХрд░рддреЛ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХреНрд░рд┐рдпреЗрддреВрди рд╕реЙрдХреЗрдЯрд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЛ. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдХрд▓рд╛рд╢реНрдирд┐рдХреЛрд╡реНрд╣ рдЕрд╕реЙрд▓реНрдЯ рд░рд╛рдпрдлрд▓рд╕рд╛рд░рдЦреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ.

рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдбреАрдлреЙрд▓реНрдЯ рдкреЛрд░реНрдЯрд╕рд╣ рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдУрд╡реНрд╣рд░рд▓реЛрдб рдЖрд╣реЗ:

 public void run()
    {
        run(23);
    }

рдмрд░рдВ, рддреНрдпрд╛рдиреБрд╕рд╛рд░, рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдерд╛рдВрдмрд╡рдгрд╛рд░реЗ рдХрд╛рд░реНрдп рджреЗрдЦреАрд▓ рдХреНрд╖реБрд▓реНрд▓рдХ рдЖрд╣реЗ, рддреЗ рд╢рд╛рд╢реНрд╡рдд рд▓реВрдкрдордзреНрдпреЗ рд╡реНрдпрддреНрдпрдп рдЖрдгрддреЗ, рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдЪреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ.

    public void stop()
    {
        System.out.println("Server was stopped");
        this.isRunning = false;
    }

рдореА рдпреЗрдереЗ рдЪрд╛рдЪрдгреА рд╡рд░реНрдЧ рджреЗрдгрд╛рд░ рдирд╛рд╣реА, рддреЗ рдЦрд╛рд▓реА рдЖрд╣реЗрдд - рддреЗ рдлрдХреНрдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрджреНрдзрддреАрдВрдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдкрд╛рд╕рддрд╛рдд. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЧрд┐рдЯрд╡рд░ рдЖрд╣реЗ.

рдереЛрдбрдХреНрдпрд╛рдд, рджреЛрди рд╕рдВрдзреНрдпрд╛рдХрд╛рд│реА рдЖрдкрдг рдореБрдЦреНрдп рдХрдиреНрд╕реЛрд▓ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдЪреА рддрддреНрддреНрд╡реЗ рд╕рдордЬреВ рд╢рдХрддрд╛. рдЖрддрд╛, рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд░рд┐рдореЛрдЯ рдХреЙрдореНрдкреНрдпреБрдЯрд░рд╡рд░ рдЯреЗрд▓рд┐рдиреЗрдЯ рдХрд░рддреЛ рддреЗрд╡реНрд╣рд╛ рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рддреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдордЬрддреЗ - рдЬрд╛рджреВ рдирд╛рд╣реАрд╢реА рдЭрд╛рд▓реА рдЖрд╣реЗ)

рддрд░, рджреБрд╡реЗ:
рд╕рд░реНрд╡ рд╕реНрд░реЛрдд рдпреЗрдереЗ рд╣реЛрддреЗ, рдЖрд╣реЗрдд рдЖрдгрд┐ рдЕрд╕рддреАрд▓
рдЯреЗрд▓рдиреЗрдЯ рдмрджреНрджрд▓
рдЯреЗрд▓рдиреЗрдЯ рдмрджреНрджрд▓ рдЕрдзрд┐рдХ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛