เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Windows client-server utilities, part 01

เบ„เบณ เบญเบงเบเบžเบญเบ™.

เบกเบทเป‰เบ™เบตเป‰เบ‚เป‰เบญเบเบขเบฒเบเบˆเบฐเป€เบšเบดเปˆเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Windows เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบŠเบฑเปˆเบ™ Telnet, TFTP, et cetera, et cetera เปƒเบ™ Java เบšเปเบฅเบดเบชเบธเบ”. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเป€เบญเบปเบฒเบชเบดเปˆเบ‡เปƒเบซเบกเปˆ - เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ›เบต, เปเบ•เปˆเบ‚เป‰เบญเบเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบ„เบปเบ™เบฎเบนเป‰เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบžเบฒเบเปƒเบ•เป‰เบœเป‰เบฒเบ„เบธเบก.

เบ™เบตเป‰เปเบกเปˆเบ™เปเบ—เป‰เบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ•เบฑเบ”.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบฅเบฒเบเบกเบฑเบ™เบญเบญเบ, เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบญเบเบˆเบฐเบ‚เบฝเบ™เบžเบฝเบ‡เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Telnet, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰เบเบฑเบ‡เบกเบตเบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰เบญเบทเปˆเบ™เป† - เบกเบฑเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบŠเบธเบ”.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบ„เบดเบ”เบญเบญเบเบงเปˆเบฒ Telnet เปเบกเปˆเบ™เบซเบเบฑเบ‡, เบกเบฑเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบซเบเบฑเบ‡, เปเบฅเบฐเบกเบฑเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเบเบฑเบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ verbatim (เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ„เบฑเบ”เบ•เบดเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบงเบฑเบ”เบชเบฐเบ”เบธเปƒเบ™เบซเบปเบงเบ‚เปเป‰เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก), เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ Telnet เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบเบฑเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™. เป‚เบ”เบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡ (เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป‚เบ”เบเป€เบˆเบ”เบ•เบฐเบ™เบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เบ‡เบฝเบšเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบžเบญเบ”เป€เบŠเบตเบŸเป€เบงเบต; เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒเบ•เปเปˆเบกเบฒ). เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบšเป€เบชเบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒ, เบœเปˆเบฒเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบžเบฐเบเบฒเบเบฒเบกเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบญเปˆเบฒเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบ–เป‰เบฒเบกเบตเบซเบ™เบถเปˆเบ‡, เบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐ. เบชเบฐเปเบ”เบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบˆเป, เบซเบผเบท, เบ–เป‰เบฒเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบฎเบนเป‰เบงเปˆเบฒเบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”.

เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ 2 เบซเป‰เบญเบ‡เบฎเบฝเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบซเป‰เบญเบ‡เบฎเบฝเบ™เบ—เบปเบ”เบชเบญเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบœเปˆเบฒเบ™เบฅเบนเบเบ„เป‰เบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ.
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ›เบฐเบเบญเบšเบกเบต:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

เปƒเบซเป‰เป„เบ›เบœเปˆเบฒเบ™เบžเบงเบเบกเบฑเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™:

TelnetClient

เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš arbitrary (เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡) เบžเบญเบ”เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเปเบฅเบฐเบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเบฒเบเบกเบฑเบ™.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเป€เบญเบปเบฒเบ—เบตเปˆเบขเบนเปˆ socket เป€เบ›เบฑเบ™ argument, เป€เบ›เบตเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ” (เบ•เบปเบงเปเบ›เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ–เบทเบเบ›เบฐเบเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เปเบซเบผเปˆเบ‡เป€เบ•เบฑเบกเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก).

 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());
        }
    }

overloading เบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฝเบงเบเบฑเบ™, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบžเบญเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบชเปเบฒเบฅเบฑเบš telnet เบ™เบตเป‰เปเบกเปˆเบ™ 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();
    }
}

TelnetServer

เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบฎเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบ socket, เบชเบปเปˆเบ‡เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบ•เบญเบšเบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™ socket. เป‚เบ„เบ‡เบเบฒเบ™เป‚เบ”เบเป€เบˆเบ”เบ•เบฐเบ™เบฒเบšเปเปˆเป„เบ”เป‰เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปเบฒเบญเบดเบ”, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™ "telnet boxed" เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ”เบดเบ”, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เปเบฅเบฐเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเบกเบต. เบ„เปเบฒเบชเบฑเบšเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบซเบผเบท SSL.

เบกเบตเบžเบฝเบ‡เปเบ•เปˆ 2 เบซเบ™เป‰เบฒเบ—เบตเปˆ (เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™เปเบกเปˆเบ™ overloaded), เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบซเบผเบฒเบ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ‚เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ–เบดเป‰เบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ•เบฒเบกเบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบฑเบ™.

 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();

    }

เป‚เบ›เบฅเปเบเบฅเบกเป€เบ›เบตเบ”เบžเบญเบ”เป€เบŠเบตเบŸเป€เบงเบต, เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบกเบฑเบ™เบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™เบžเบปเบšเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡, เบœเปˆเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป„เบ›เบชเบนเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบซเบกเปˆ, เปเบฅเบฐเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป„เบ›เบซเบฒเป€เบ•เบปเป‰เบฒเบฎเบฑเบš. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบ„เบทเบเบฑเบšเบ›เบทเบ™เป‚เบˆเบกเบ•เบต Kalashnikov.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบตเบเบฒเบ™เป‚เบซเบผเบ”เป€เบเบตเบ™เบชเปเบฒเบฅเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบเบฑเบšเบžเบญเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

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

เบ”เบต, เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก, เบซเบ™เป‰เบฒเบ—เบตเปˆเบขเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป†, เบกเบฑเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡ loop เบ™เบดเบฅเบฑเบ™เบ”เบญเบ™, เบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบกเบฑเบ™.

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

เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเปƒเบซเป‰เบซเป‰เบญเบ‡เบชเบญเบšเป€เบชเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰ - เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เปเบกเปˆเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ git.

เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบš, เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบ•เบญเบ™เปเบฅเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰ console เบ•เบปเป‰เบ™เบ•เป. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ telenet เบเบฑเบšเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ, เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™ - magic เป„เบ”เป‰เบซเบฒเบเป„เบ›)

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ:
เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™, เปเบกเปˆเบ™เปเบฅเบฐเบˆเบฐเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰
เบเปˆเบฝเบงเบเบฑเบš Telnet
เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš Telnet

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™