Windows рдХреНрд▓рд╛рдЗрдиреНрдЯ-рд╕рд░реНрднрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рд╕рдБрдЧ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд▓реЗрдЦрди, рднрд╛рдЧ 02

рд╡рд┐рдиреНрдбреЛрдЬ рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рд╕рдорд░реНрдкрд┐рдд рд▓реЗрдЦрд╣рд░реВрдХреЛ рдЬрд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рд╛рдЦреНрджреИ, рд╣рд╛рдореА TFTP (рдЯреНрд░рд┐рднрд┐рдпрд▓ рдлрд╛рдЗрд▓ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХрд▓) - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╛рдЗрд▓ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХрд▓рдорд╛ рдЫреБрдиреБрд╣реЛрд╕реН рддрд░ рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрджреИрдиреМрдВред

рдкрдЫрд┐рд▓реНрд▓реЛ рдкрдЯрдХрдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореА рдЫреЛрдЯрдХрд░реАрдорд╛ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рдЬрд╛рдФрдВ, рдЖрд╡рд╢реНрдпрдХрд╕рдБрдЧ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдХреЛрдб рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдпрд╕рд▓рд╛рдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдердк рд╡рд┐рд╡рд░рдг - рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд

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

рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдЬрдм рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдЧреНрд░рд╛рд╣рдХрд▓реЗ рд╕рд░реНрднрд░рдХреЛ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛ рд░ рдкреЛрд░реНрдЯ рдЬрд╕рдорд╛ рдЕрдиреБрдХреВрд▓рди 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());
       }
    }

рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕рдЮреНрдЭреНрдпрд╛рд▓рдорд╛ get рд╡рд╛ put рдмрд╛рд╣реЗрдХ рдЕрд░реНрдХреЛ рдЖрджреЗрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗ, 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());
        }
    }

рдЪрдпрдирдХрд░реНрддрд╛ рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ рдЬрд╕рд▓реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдХрд╛рд░реНрдпрдХреНрд░рдордХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫред рдпрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рдзреЗрд░реИ рд╕реБрдиреНрджрд░ рдЫреИрди рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЯреНрд░рд┐рдХ рдХреЛрдб рдмреНрд▓рдХ рдмрд╛рд╣рд┐рд░ рдЬрдмрд░рдЬрд╕реНрддреА рдирд┐рдХрд╛рд╕рдХреЛ рд╕рд╛рде рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫреИрди, рддрд░ рдпрд╕рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдХреЗрд╣рд┐ рдЪреАрдЬрд╣рд░реВрдХреЛ рдЬрд╛рднрд╛рдорд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реЛ, рдЬрд╕реНрддреИ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди