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

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

рдорд╛рдЧрдЪреНрдпрд╛ рд╡реЗрд│реЗрдкреНрд░рдорд╛рдгреЗ, рдереНрдпреЛрд░реАрд╡рд░ рдереЛрдбрдХреНтАНрдпрд╛рдд рдЬрд╛рдК, рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдорд╛рдгреЗрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХрд░рдгрд╛рд░рд╛ рдХреЛрдб рдкрд╛рд╣реВ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ. рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ - рдХрдЯ рдЕрдВрддрд░реНрдЧрдд

рдореА рд╕рдВрджрд░реНрдн рдорд╛рд╣рд┐рддреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдЬреНрдпрд╛рдЪреЗ рджреБрд╡реЗ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрдкрдгреЗ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдЖрдврд│реВ рд╢рдХрддрд╛рдд, рдореА рдлрдХреНрдд рдПрд╡рдвреЗрдЪ рд╕рд╛рдВрдЧреЗрди рдХреА, TFTP рд╣реЗ FTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд░реВрдкрд╛рдВрддрд░ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЖрдгрд┐ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрджреЗрд╢рд╛рдВрд╢рд┐рд╡рд╛рдп рдпреЗрдереЗ рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА. рддрдерд╛рдкрд┐, рдЖрдордЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдереЛрдбреА рдЕрдзрд┐рдХ рдореЛрд╣рдХ рдЖрдгрд┐ рд▓реЗрдЦрди рдХреЛрдбрдЪреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрддреНрд╡рд╛рдВрд╢реА рдЬреБрд│рд╡реВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдХрд┐рдВрдЪрд┐рдд рдмрджрд▓рд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ - рдпрд╛рдореБрд│реЗ рдСрдкрд░реЗрд╢рдирдЪреА рддрддреНрддреНрд╡реЗ рдмрджрд▓рдд рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рдЗрдВрдЯрд░рдлреЗрд╕, IMHO, рдереЛрдбрд╛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рдмрдирддреЛ рдЖрдгрд┐ FTP рдЖрдгрд┐ TFTP рдЪреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреИрд▓реВ рдПрдХрддреНрд░ рдХрд░рддреЗ.

рд╡рд┐рд╢реЗрд╖рддрдГ, рд▓реЙрдиреНрдЪ рдХреЗрд▓реНрдпрд╛рд╡рд░, рдХреНрд▓рд╛рдпрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ IP рдкрддреНрддреНрдпрд╛рдЪреА рдЖрдгрд┐ рд╕рд╛рдиреБрдХреВрд▓ TFTP рдЙрдШрдбрд▓реЗрд▓реНрдпрд╛ рдкреЛрд░реНрдЯрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ (рдорд╛рдирдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╢реА рд╡рд┐рд╕рдВрдЧрддрддреЗрдореБрд│реЗ, рдореА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕ рдкреЛрд░реНрдЯ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╕реЛрдбрдгреЗ рдпреЛрдЧреНрдп рдорд╛рдирд▓реЗ), рддреНрдпрд╛рдирдВрддрд░ рдП. рдХрдиреЗрдХреНрд╢рди рдЙрджреНрднрд╡рддреЗ, рдкрд░рд┐рдгрд╛рдореА рдХреНрд▓рд╛рдпрдВрдЯ рдХрдорд╛рдВрдбрдкреИрдХреА рдПрдХ рдкрд╛рдард╡реВ рд╢рдХрддреЛ - рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдкрд╛рдард╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА - рдорд┐рд│рд╡рд╛ рдХрд┐рдВрд╡рд╛ рдареЗрд╡рд╛. рддрд░реНрдХ рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдлрд╛рдЗрд▓реНрд╕ рдмрд╛рдпрдирд░реА рдореЛрдбрдордзреНрдпреЗ рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрдкрдгреЗ 4 рд╡рд░реНрдЧ рд╡рд╛рдкрд░рд▓реЗ:

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

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

TFTPCрдХреНрд▓рд╛рдпрдВрдЯ

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

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

 public void run(String ip, int port)
    {
        this.ip = ip;
        this.port = port;
        try {
            inicialization();
            Scanner keyboard = new Scanner(System.in);
            while (isRunning) {
                getAndParseInput(keyboard);
                sendCommand();
                selector();
                }
            }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

рдХреЛрдбрдЪреНрдпрд╛ рдпрд╛ рдмреНрд▓реЙрдХрдордзреНрдпреЗ рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреА рдкрд╛рд╣реВ рдпрд╛:

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

private  void put(String sourcePath, String destPath)
    {

        File src = new File(sourcePath);
        try {

            InputStream scanner = new FileInputStream(src);
            byte[] bytes = scanner.readAllBytes();
            for (byte b : bytes)
                sout.write(b);
            sout.close();
            inicialization();
            System.out.println("nDonen");
            }

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

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

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

   private void get(String sourcePath, String destPath){
        long sizeOfFile = 0;
        try {


            byte[] sizeBytes = new byte[Long.SIZE];
           for (int i =0; i< Long.SIZE/Byte.SIZE; i++)
           {
               sizeBytes[i] = (byte)sin.read();
               sizeOfFile*=256;
               sizeOfFile+=sizeBytes[i];
           }

           FileOutputStream writer = new FileOutputStream(new File(destPath));
           for (int i =0; i < sizeOfFile; i++)
           {
               writer.write(sin.read());
           }
           writer.close();
           System.out.println("nDONEn");
       }
       catch (Exception e){
            System.out.println(e.getMessage());
       }
    }

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

    private void getAndParseInput(Scanner scanner)
    {
        try {

            input = scanner.nextLine().split(" ");
            typeOfCommand = input[0];
            sourcePath = input[1];
            destPath = input[2];
        }
        catch (Exception e) {
            System.out.println("Bad input");
        }
    }

рдХрдорд╛рдВрдб рдкрд╛рдард╡рдгреЗ - рд╕реНрдХреЕрдирд░рдордзреВрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реА рдХрдорд╛рдВрдб рд╕реЙрдХреЗрдЯрдордзреНрдпреЗ рдкрд╛рдард╡рддреЗ рдЖрдгрд┐ рдкрд╛рдард╡рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрддреЗ

    private void sendCommand()
    {
        try {

            for (String str : input) {
                for (char ch : str.toCharArray()) {
                    sout.write(ch);
                }
                sout.write(' ');
            }
            sout.write('n');
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

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

    private void selector()
    {
        do{
            if (typeOfCommand.equals("get")){
                get(sourcePath, destPath);
                break;
            }
            if (typeOfCommand.equals("put")){
                put(sourcePath, destPath);
                break;
            }
            showErrorMessage();
        }
        while (false);
    }
}

TFTPS рд╕рд░реНрд╡реНрд╣рд░

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

рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд░рди рдкрджреНрдзрдд рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ, рдЬреА рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рдЖрдгрд┐ рд╕реЙрдХреЗрдЯрдордзреВрди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рд╡рд░ рд╢рд╛рд╢реНрд╡рдд рд▓реВрдкрдордзреНрдпреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ.

    public void run(int port) {
            this.port = port;
            incialization();
            while (true) {
                getAndParseInput();
                selector();
            }
    }

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

    private  void put(String source, String dest){
            writeToFileFromSocket();
            System.out.print("nDonen");
    };
    private void writeToFileFromSocket()
    {
        try {
            FileOutputStream writer = new FileOutputStream(new File(destPath));
            byte[] bytes = sin.readAllBytes();
            for (byte b : bytes) {
                writer.write(b);
            }
            writer.close();
        }
        catch (Exception e){
            System.out.println(e.getMessage());
        }
    }

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


 private  void get(String source, String dest){
        File sending = new File(source);
        try {
            FileInputStream readFromFile = new FileInputStream(sending);
            byte[] arr = readFromFile.readAllBytes();
            byte[] bytes = ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong(sending.length()).array();
            for (int i = 0; i<Long.SIZE / Byte.SIZE; i++)
                sout.write(bytes[i]);
            sout.flush();
            for (byte b : arr)
                sout.write(b);
        }
        catch (Exception e){
            System.out.println(e.getMessage());
        }
    };

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

    private void  incialization()
    {
        try {
            serverSocket = new ServerSocket(port);
            socket = serverSocket.accept();
            sin = socket.getInputStream();
            sout = socket.getOutputStream();
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

рд╕рд╛рд░рд╛рдВрд╢ рдХрд░рдгреЗ:

рдЖрдореНрд╣реА рдлрдХреНрдд рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╡рд░ рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рднрд┐рдиреНрдирддрд╛ рд▓рд┐рд╣рд┐рд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ рд╣реЗ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗ рдЖрд╣реЗ. рддрддреНрд╡рддрдГ, рдореА рдпреЗрдереЗ рдЕрдореЗрд░рд┐рдХрд╛ рд╢реЛрдзрд▓реА рдирд╛рд╣реА рдЖрдгрд┐ рдЦреВрдк рдирд╡реАрди рдЧреЛрд╖реНрдЯреА рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ Habr├й рд╡рд░ рдХреЛрдгрддреЗрд╣реА рд╕рдорд╛рди рд▓реЗрдЦ рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ cmd рдЙрдкрдпреБрдХреНрддрддреЗрдмрджреНрджрд▓ рд▓реЗрдЦрд╛рдВрдЪреА рдорд╛рд▓рд┐рдХрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рддреНрдпрд╛рд╡рд░ рд╕реНрдкрд░реНрд╢ рди рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рд╣реЛрддреЗ.

рджреБрд╡реЗ:

рд╕реНрддреНрд░реЛрдд рдХреЛрдб рднрд╛рдВрдбрд╛рд░
TFTP рдмрджреНрджрд▓ рдереЛрдбрдХреНрдпрд╛рдд
рд╕рдорд╛рди рдЧреЛрд╖реНрдЯ, рдкрдг рд░рд╢рд┐рдпрди рдордзреНрдпреЗ

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

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