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

เบเบฒเบ™เบชเบทเบšเบ•เปเปˆเบŠเบธเบ”เบšเบปเบ”เป€เบฅเบทเปˆเบญเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ—เบตเปˆเบญเบธเบ—เบดเบ”เปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡เบ‚เบญเบ‡ Windows console utilities, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰เปเบ•เปˆเปเบ•เบฐเบ—เบตเปˆ TFTP (Trivial File Transfer Protocol) - เป‚เบ›เป‚เบ•เบ„เบญเบ™เบเบฒเบ™เป‚เบญเบ™เป„เบŸเบฅเปŒเบ‡เปˆเบฒเบเบ”เบฒเบ.

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

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

เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง, เบฅเบนเบเบ„เป‰เบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบžเบญเบ”เบ—เบตเปˆ TFTP เบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เป€เบ›เบตเบ” (เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบšเปเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบ‚เป‰เบญเบเบ–เบทเบงเปˆเบฒเบกเบฑเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบˆเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบžเบญเบ”), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™, เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบซเบ™เบถเปˆเบ‡ - เป„เบ”เป‰เบฎเบฑเบšเบซเบผเบทเบงเบฒเบ‡, เป€เบžเบทเปˆเบญเบฎเบฑเบšเบซเบผเบทเบชเบปเปˆเบ‡เป„เบŸเบฅเปŒเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบชเบปเปˆเบ‡เปƒเบ™เป‚เบซเบกเบ”เบ–เบฒเบ™เบชเบญเบ‡เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เป€เบซเบ”เบœเบปเบ™.

เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบดเบ—เบตเบเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰ 4 เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เบฒเบกเบ›เบฐเป€เบžเบ™เบต:

  • TFTClient
  • TFTPSserver
  • TTPClientTester
  • TFTPServerTester

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

TFTClient

เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเป‚เบ”เบเปƒเบŠเป‰ ip เปเบฅเบฐเบซเบกเบฒเบเป€เบฅเบเบžเบญเบ”, เบญเปˆเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบเบเบฐเปเบชเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เปเบ›เป‰เบ™เบžเบดเบก), เปเบเบเบกเบฑเบ™, เป‚เบญเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปเบฅเบฐ, เบ‚เบถเป‰เบ™เบเบฑเบšเบงเปˆเบฒเบ—เปˆเบฒเบ™. เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบชเบปเปˆเบ‡โ€‹เบซเบผเบทโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹, เป‚เบญเบ™โ€‹เบซเบผเบทโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹.

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

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

เปƒเบซเป‰เป„เบ›เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰:

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

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

เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบต. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป†, เบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆ. เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™ bytes เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเปˆเบฒเบ™เบˆเบฒเบเป€เบ•เบปเป‰เบฒเบชเบฝเบš, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบงเปˆเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเป‚เบญเบ™เบกเบตเบ™เป‰เปเบฒเบซเบ™เบฑเบเป€เบ—เบปเปˆเบฒเปƒเบ”. เบ‚เบฐเบซเบ™เบฒเบ”เป„เบŸเบฅเปŒเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบเบฒเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ 4 bytes เป„เบ”เป‰เบ–เบทเบเบเบญเบกเบฎเบฑเบšเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบ•เปเปˆเบกเบฒเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡. เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™ Java เบซเบผเบฒเบ, เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบš SI, เปเบ•เปˆเบกเบฑเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบกเบฑเบ™.

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

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

เป‚เบ•เป€เบฅเบทเบญเบเป€เบ›เบฑเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบเบณเบ™เบปเบ”เบเบฒเบ™เบเบฐเบ—เบณเบ‚เบญเบ‡เป‚เบ›เบฃเปเบเบก เป‚เบ”เบเบ‚เบถเป‰เบ™เบเบฑเบšเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒ. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบšเปเปˆเบ‡เบฒเบกเบซเบผเบฒเบเปเบฅเบฐ trick เบ—เบตเปˆเปƒเบŠเป‰เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบญเบญเบเบ™เบญเบเบšเบฅเบฑเบญเบเบฅเบฐเบซเบฑเบ”, เปเบ•เปˆเป€เบซเบ”เบœเบปเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฒเบ”เบขเบนเปˆเปƒเบ™ Java เบ‚เบญเบ‡เบšเบฒเบ‡เบชเบดเปˆเบ‡, เป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเปเบ—เบ™เปƒเบ™ C #, เบ•เบปเบงเบŠเบตเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบˆเบฒเบ C ++, เบซเบผเบทเบขเบนเปˆ. เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ goto เบ‚เบตเป‰เบฎเป‰เบฒเบเปเบฅเบฐเบ‚เบตเป‰เบฎเป‰เบฒเบ, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบงเบเบ‡เบฒเบก. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเบดเบ—เบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบกเบตเบ„เบงเบฒเบกเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบกเป€เบฅเบฑเบเบ™เป‰เบญเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบšเบ„เปเบฒเบงเบดเบˆเบฒเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก String-delegate เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปเบ•เปˆเบšเปเปˆเบกเบตเบœเบนเป‰เปเบ—เบ™ ...

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

TFTPSserver

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

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

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

เบงเบดเบ—เบตเบเบฒเบ™เบงเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบซเปเปˆเบงเบดเบ—เบตเบเบฒเบ™ writeToFileFromSocket เบ—เบตเปˆเป€เบ›เบตเบ”เบเบฐเปเบชเบเบฒเบ™เบ‚เบฝเบ™เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเปเบฅเบฐเบ‚เบฝเบ™ input bytes เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบ socket, เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบญเบ™เบเป‰เบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ‚เบฝเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

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

เบงเบดเบ—เบตเบเบฒเบ™ get เบ”เบถเบ‡เป„เบŸเบฅเปŒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบงเปƒเบ™เบžเบฒเบเบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก, เป€เบžเบทเปˆเบญเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบเบฒเบ™เป‚เบญเบ™เป„เบŸเบฅเปŒ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบเบฒเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเปเบšเปˆเบ‡เบกเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™ 4 bytes, เป‚เบญเบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ byte-by-byte. เป„เบ›เบซเบฒเป€เบ•เบปเป‰เบฒเบฎเบฑเบš, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเบ›เบฐเบเบญเบšเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒเป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป‚เบญเบ™ bytes เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ, เบญเปˆเบฒเบ™เบˆเบฒเบเบเบฐเปเบชเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป„เบŸเบฅเปŒ.


 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 เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒ, เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป€เบ•เบปเป‰เบฒเบฎเบฑเบšเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบกเบฒเบˆเบฒเบเปเบ›เป‰เบ™เบžเบดเบก. เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ repository, เบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเป€เบฅเบทเบญเบ.
เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบšเบฅเบฑเบญเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒ เบžเบฒเบเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบญเบ™เบเป‰เบฒเบเปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปเบฅเบฐเบเบถเบ”เบ„เบทเบ™เปƒเบซเบกเปˆ - เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบผเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

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

เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบš:

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

เป€เบญเบเบฐเบชเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡:

เบšเปˆเบญเบ™เป€เบเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡
เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบš TFTP
เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเปƒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ

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

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