เชตเชฟเชจเซเชกเซ‹เช เช•เซเชฒเชพเชฏเช‚เชŸ-เชธเชฐเซเชตเชฐ เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€เชเชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชธเชพเชฅเซ‡ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชฒเช–เชตเชพเชจเซเช‚, เชญเชพเช— 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());
       }
    }

เชœเซ‹ เช•เซเชฒเชพเชฏเชจเซเชŸ เชตเชฟเชจเซเชกเซ‹เชฎเชพเช‚ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹