αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžšαžšαž”αžŸαŸ‹ Windows client-server utilities, part 02

αžŠαŸ„αž™αž”αž“αŸ’αžαžŸαŸŠαŸαžšαžΈαž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž”αž“αŸ’αžαžŠαŸ‚αž›αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž“αŸƒαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž»αž„αžŸαžΌαž› Windows αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž‡αž½αž™αž”αžΆαž“αž€αŸ’αžšαŸ…αž–αžΈαž”αŸ‰αŸ‡αž›αžΎ TFTP (Trivial File Transfer Protocol) αžŠαŸ‚αž›αž‡αžΆαž–αž·αž’αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž―αž€αžŸαžΆαžšαžŸαžΆαž˜αž‰αŸ’αž‰αŸ”

αžŠαžΌαž…αž›αžΎαž€αž˜αž»αž“ αžŸαžΌαž˜αž“αž·αž™αžΆαž™αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈαž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ αžŸαžΌαž˜αž˜αžΎαž›αž€αžΌαžŠαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž˜αž½αž™ αž αžΎαž™αžœαž·αž—αžΆαž‚αžœαžΆαŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜ - αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž€αžΆαžαŸ‹

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž…αž˜αŸ’αž›αž„-αž”αž·αž‘αž—αŸ’αž‡αžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž™αŸ„αž„αž‘αŸ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžαžΆ TFTP αž‚αžΊαž‡αžΆαž”αŸ†αžšαŸ‚αž”αŸ†αžšαž½αž›αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžš FTP αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαŸ” αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž™αž€β€‹αž…αŸαž‰ αž αžΎαž™β€‹αžαžΆαž˜β€‹αž–αž·αžβ€‹αž‚αŸ’αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž“αŸ…β€‹αž‘αžΈβ€‹αž“αŸαŸ‡β€‹αž‘αŸ αž›αžΎαž€β€‹αž›αŸ‚αž„β€‹αžαŸ‚β€‹αž–αžΆαž€αŸ’αž™β€‹αž”αž‰αŸ’αž‡αžΆβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž‘αž‘αž½αž› αž“αž·αž„β€‹αž•αŸ’αž‘αŸαžšβ€‹αž―αž€αžŸαžΆαžšαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αž—αžΆαž–αž†αžΎαžαž†αžΆαž™αž”αž“αŸ’αžαž·αž… αž“αž·αž„αžŸαž˜αŸ’αžšαž”αžαžΆαž˜αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠ αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž… - αž“αŸαŸ‡αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ IMHO αž€αŸ’αž›αžΆαž™αž‡αžΆαž‘αžΌαž‡αžΈαžαž›αž”αž“αŸ’αžαž·αž…αž αžΎαž™ αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αŸƒ FTP αž“αž·αž„ TFTP αŸ”

αž‡αžΆαž–αž·αžŸαŸαžŸ αž“αŸ…αž–αŸαž›αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž’αžαž·αžαž·αž‡αž“αžŸαŸ’αž“αžΎαžŸαž»αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž…αŸ’αžšαž€αžŠαŸ‚αž› TFTP αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€ (αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αž·αž’αžΈαž€αžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαžœαžΆαžŸαž˜αžŸαŸ’αžšαž”αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž»αž€αž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž…αŸ’αžšαž€) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΎαžαž‘αžΎαž„ αžŠαŸ‚αž›αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž’αžΆαž…αž•αŸ’αž‰αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™ - αž‘αž‘αž½αž› αž¬αžŠαžΆαž€αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž› αž¬αž•αŸ’αž‰αžΎαž―αž€αžŸαžΆαžšαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž‚αŸ„αž›αž–αžΈαžš αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαž½αž›αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž–αž·αž’αžΈαž€αžΆαžš αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ 4 classes αž‡αžΆαž”αŸ’αžšαž–αŸƒαžŽαžΈαŸ–

  • TTPClient
  • αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ TFTPS
  • TTPClientTester
  • TFTPServerTester

αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαžαŸ’αž“αžΆαž€αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αžœαž·αž—αžΆαž‚αž–αž½αž€αž‚αŸαž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΌαžŠαž“αžΉαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžœαžΆαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αžαŸ’αžαž”αž‘αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αžΎαž›αžαŸ’αž“αžΆαž€αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αŸ”

TTPClient

αž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αž“αŸαŸ‡αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ 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());
        }
    }

αžαŸ„αŸ‡β€‹αž‘αŸ…β€‹αž˜αžΎαž›β€‹αžœαž·αž’αžΈβ€‹αžŠαŸ‚αž›β€‹αž‚αŸβ€‹αž αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž”αŸ’αž›αž»αž€β€‹αž€αžΌαžŠβ€‹αž“αŸαŸ‡αŸ–

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎ - αžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαŸ’αž€αŸαž“αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αž˜αžΆαžαž·αž€αžΆαž“αŸƒαž―αž€αžŸαžΆαžšαž‡αžΆαž’αžΆαžšαŸαž“αŸƒαž”αŸƒαžŠαŸ‚αž›αž™αžΎαž„αžŸαžšαžŸαŸαžšαž˜αŸ’αžαž„αž˜αž½αž™αž‘αŸ…αžšαž“αŸ’αž’αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž”αž·αž‘αžœαžΆαž αžΎαž™αž”αžΎαž€αžœαžΆαž˜αŸ’αžαž„αž‘αŸ€αž (αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž”αŸ†αž•αž»αžαž“αŸ„αŸ‡αž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚ αžœαžΆαž’αžΆαž“αžΆαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž’αž“αž’αžΆαž“) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αžŸαžΆαžšαž’αŸ†αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‡αŸ„αž‚αž‡αŸαž™αŸ”

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 αž”αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž™αž€αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αž›αŸ‚αž„αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αŸ…αž‡αžΆαž›αŸαžαž˜αž½αž™αŸ” αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž Java αž‘αŸ αžœαžΆαž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 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 αž“αŸƒαžšαžΏαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαžΌαž…αž‡αžΆ delegates αž“αŸ…αž€αŸ’αž“αž»αž„ 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);
    }
}

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ TFTPS

αž˜αž»αžαž„αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαž»αžŸαž‚αŸ’αž“αžΆαž–αžΈαž˜αž»αžαž„αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαžŠαŸ„αž™ αž“αž·αž„αž’αŸ† αž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸ„αŸ‡αž˜αž€αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž˜αž€αž–αžΈαž€αŸ’αžαžΆαžšαž…αž»αž…αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž€αž–αžΈαžšαž“αŸ’αž’αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž‡αžΆαž‘αžΌαž‘αŸ…αžŠαžΌαž…αž‚αŸ’αž“αžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž›αžΎαž€αž‘αžΎαž„αž‘αŸ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ‰αŸ‡αžαŸ‚αž›αžΎαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžŠαŸ‚αž›αž‘αž‘αž½αž›αž…αŸ’αžšαž€αž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž‰αŸ’αž…αžΌαž›αž–αžΈαžšαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž’αžŸαŸ‹αž€αž›αŸ’αž”αž‡αžΆαž“αž·αž…αŸ’αž…αŸ”

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

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹ αžŠαŸ‚αž›αžšαž»αŸ†αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš writeToFileFromSocket αžŠαŸ‚αž›αž”αžΎαž€αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‘αŸ…αž―αž€αžŸαžΆαžšαž˜αž½αž™ αž αžΎαž™αžŸαžšαžŸαŸαžšαž”αŸƒαž”αž‰αŸ’αž…αžΌαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ 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 αž”αŸƒ αž•αŸ’αž‘αŸαžšαž–αž½αž€αžœαžΆαž‡αžΆαž”αŸƒαž”αŸƒαž”αŸƒαŸ” αž‘αŸ…αž€αžΆαž“αŸ‹αžšαž“αŸ’αž’ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŠαŸ„αž™αž”αžΆαž“αž‘αž‘αž½αž› αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž–αž½αž€αžœαžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž‘αŸ…αž‡αžΆαž›αŸαžαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž•αŸ’αž‘αŸαžšαž”αŸƒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž―αž€αžŸαžΆαžš αž’αžΆαž“αž–αžΈαžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž”αž‰αŸ’αž…αžΌαž›αž–αžΈαž―αž€αžŸαžΆαžšαŸ”


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

αžŸαž„αŸ’αžαŸαž”:

αž™αžΎαž„αž‘αžΎαž”αžαŸ‚αž”αžΆαž“αžŸαžšαžŸαŸαžšαž”αŸ†αžšαŸ‚αž”αŸ†αžšαž½αž›αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž›αžΎαž–αž·αž’αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαž˜αž‰αŸ’αž‰ αž αžΎαž™αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž’αžΆαž˜αŸαžšαž·αž…αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž αžΎαž™αž˜αž·αž“αž”αžΆαž“αžŸαžšαžŸαŸαžšαžšαžΏαž„αžαŸ’αž˜αžΈαž…αŸ’αžšαžΎαž“αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αž’αžαŸ’αžαž”αž‘αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎ Habre αž αžΎαž™αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž’αŸ†αž–αžΈαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ cmd αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαžŠαŸ‚αž›αž˜αž·αž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžœαžΆαŸ”

αž―αž€αžŸαžΆαžšαž™αŸ„αž„:

αžƒαŸ’αž›αžΆαŸ†αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž–
αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈ TFTP
αžšαžΏαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž—αžΆαžŸαžΆαžšαž»αžŸαŸ’αžŸαžΈ

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹