Te tuhi rorohiko me te mahi o nga taputapu kiritaki-tūmau Windows, wahanga 02

Kei te haere tonu te raupapa o nga tuhinga e whakatapua ana ki te whakatinana ritenga o nga taputapu papatohu Windows, kaore e taea e matou te pa atu ki te TFTP (Trivial File Transfer Protocol) - he kawa whakawhiti kōnae ngawari.

Ka rite ki te wa whakamutunga, me korero poto ki runga i te ariā, tirohia te waehere e whakatinana ana i nga mahi rite ki te mea e hiahiatia ana, ka tātarihia. Ētahi atu kōrero - i raro i te tapahi

E kore ahau e kape-whakapiri i nga korero tohutoro, nga hononga ka kitea i mua i te mutunga o te tuhinga, ka kii noa ahau ko te mea nui, ko te TFTP he rereketanga ngawari o te kawa FTP, kei roto i te tautuhinga mana uru. kua tangohia, me te mea kaore he mea i konei engari ko nga whakahau mo te tango me te whakawhiti i tetahi konae. Heoi, kia pai ake ai to maatau whakatinanatanga me te urutau ki nga tikanga o naianei o te tuhi waehere, kua whakarereke paku te wetereo - kaore tenei e whakarereke i nga maataapono o te mahi, engari ko te atanga, IMHO, ka iti ake te arorau, he whakakotahi i nga ahuatanga pai o te FTP me te TFTP.

Ina koa, i te wa e whakarewahia ana, ka tono te kaihoko ki te wahitau IP o te tūmau me te tauranga kei te tuwhera te TFTP ritenga (na te kore e hototahi ki te kawa paerewa, i whakaaro ahau he mea tika kia waiho ma te kaiwhakamahi te kaha ki te kowhiri i tetahi tauranga), ka mutu he ka puta he hononga, na te mea ka taea e te kiritaki te tuku i tetahi o nga whakahau - tiki, hoatu ranei, ki te tango, ki te tuku ranei i tetahi konae ki te tūmau. Ka tukuna nga konae katoa ki te aratau rua hei whakangawari i te arorau.

Hei whakatinana i te kawa, e 4 nga karaehe i whakamahia e au:

  • TFTPKaihoko
  • TFTPServer
  • TFTPClientTester
  • TFTPServerTester

Na te mea kei te noho nga karaehe whakamatautau mo te tarai i nga mea matua, kaore au e tarai, engari ka noho te waehere ki roto i te putunga; ka kitea he hononga ki te mutunga o te tuhinga. Inaianei ka titiro ahau ki nga karaehe matua.

TFTPKaihoko

Ko te mahi o tenei karaehe ko te hono atu ki tetahi tūmau mamao ma tana ip me te tau tauranga, panuihia he whakahau mai i te awa whakauru (i tenei keehi, ko te papapātuhi), poroporoaki, whakawhiti ki te tūmau, a, i runga ano i a koe me tuku, tango ranei i tetahi konae, whakawhiti, tiki ranei.

Ko te waehere mo te whakarewa i te kiritaki ki te hono atu ki te tūmau me te tatari mo te whakahau mai i te awa whakauru he penei te ahua. He maha nga taurangi o te ao e whakamahia ana i konei ka whakaahuahia i waho o te tuhinga, i roto i nga tuhinga katoa o te kaupapa. Na te iti o te korero, kaore au i te whakahua i a raatau kia kore ai e nui te taumaha o te tuhinga.

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

Me titiro ki nga tikanga e kiia ana i tenei poraka o te waehere:

I konei ka tukuna te konae - ma te whakamahi i te matawai, ka whakaatuhia e matou nga ihirangi o te konae hei huinga paita, ka tuhia e matou takitahi ki te turanga, ka mutu ka kati ka whakatuwheratia ano (ehara i te otinga tino kitea, engari ka whakamanahia te tukunga o nga rauemi), i muri iho ka whakaatuhia he panui mo te whakawhiti angitu.

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

Ko tenei wahanga waehere e whakaatu ana i te tiki raraunga mai i te tūmau. He mea iti ano nga mea katoa, ko te poraka tuatahi o te waehere anake te mea pai. Kia mohio ai koe ki te maha o nga paita me panui mai i te turanga, me mohio koe ki te taumaha o te konae kua whakawhitia. Ko te rahi o te konae kei runga i te tūmau e tohuhia ana he tauoti roa, no reira e 4 nga paita ka whakaaetia ki konei, ka huri hei tau kotahi. Ehara tenei i te huarahi Java rawa, he rite tonu mo te SI, engari ka whakatauhia e ia tana raru.

Na he mea iti nga mea katoa - ka whiwhi tatou i te maha o nga paita e mohiotia ana mai i te turanga ka tuhia ki tetahi konae, muri iho ka whakaatuhia he panui angitu.

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

Mena he whakahau atu i tua atu i te tiki, i te tuu ranei i whakauruhia ki te matapihi o te kiritaki, ka karangahia te mahi showErrorMessage, e tohu ana he he te whakaurunga. Na te mea iti, e kore ahau e whakahua. He mea whakamere te mahi o te tango me te wehe i te aho whakauru. Ka tukuna e matou te matawai ki roto, mai i tera ka whiwhi matou i tetahi raina kua wehea e nga mokowā e rua me te whakahau, te wahitau puna me te wahitau ūnga.

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

Te tuku tono—ka tuku i te whakahau i whakauruhia mai i te matawai ki te turanga ka akiaki kia tukuna

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

Ko te kaikowhiri he mahi e whakatau ana i nga mahi a te papatono i runga i te aho kua whakauruhia. Ko nga mea katoa i konei kaore i te tino ataahua, a, ko te tinihanga i whakamahia ehara i te mea pai rawa atu me te whakaputa i waho o te poraka waehere, engari ko te take nui mo tenei ko te kore o Java o etahi mea, penei i nga kaikawe i roto i te C #, nga tohu tohu mahi mai i te C++, i te ranei. iti rawa te goto whakamataku me te whakamataku, ka taea e koe te whakatinana i tenei ataahua. Mena ka mohio koe ki te hanga i te waehere kia iti ake te huatau, ka mihi ahau ki nga whakahee i roto i nga korero. Ki ahau nei me hiahia he papakupu String-delegate i konei, engari karekau he kaikawe...

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

TFTPServer

He rereke nga mahi a te tūmau i te mahi a te kiritaki, i te nuinga o te waa, ko nga whakahau ka tae mai ki a ia ehara i te papapātuhi, engari mai i te turanga. He rite tonu etahi o nga tikanga, no reira kare au e whakahua, ka pa noa ahau ki nga rereketanga.

Hei timata, ka whakamahia te tikanga oma, ka whiwhi i te tauranga hei whakaurunga me te tukatuka i nga raraunga whakauru mai i te turanga i roto i te kohanga mutunga.

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

Ko te tikanga tuku, e takai ana i te tikanga writeToFileFromSocket e whakatuwhera ana i te awa tuhi ki tetahi konae me te tuhi i nga paita whakauru katoa mai i te turanga, ka whakaatu i te panui e tohu ana i te otinga angitu o te whakawhitinga ina oti te tuhi.

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

Ko te tikanga tiki te tiki i te kōnae tūmau. Ka rite ki te korero kua korerohia i te waahanga i te taha o te kiritaki o te papatono, kia pai ai te whakawhiti i tetahi konae me mohio koe ki tona rahi, ka rongoa i roto i te tauoti roa, no reira ka wehea e ahau ki roto i te huinga o te 4 paita, whakawhiti i te paita-a-paita. ki te turanga, a, ka riro mai, ka kohia ki runga i te kaihoko ki te nama ki muri, ka whakawhitihia e ahau nga paita katoa e hanga ana i te konae, panui mai i te awa whakauru mai i te konae.


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

Ko te tikanga getAndParseInput he rite ki te kiritaki, ko te rereke anake ko te panui raraunga mai i te turanga, kaua mai i te papapātuhi. Ko te waehere kei roto i te putunga, pera i te kaiwhiriwhiri.
I roto i tenei take, ka whakanohoia te arawhiti i roto i te poraka motuhake o te waehere, no te mea i roto i tenei whakatinanatanga, i muri i te otinga o te whakawhitinga, ka tukuna nga rauemi ka noho ano - ano hei whakamarumaru i nga rerenga mahara.

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

Hei whakarāpopoto:

Katahi ano ka tuhia e matou o maatau rereke ki runga i te kawa whakawhiti raraunga ngawari me te whakaaro me pehea te mahi. Ko te tikanga, kaore au i kite i a Amerika i konei kaore au i tuhi i nga mea hou, engari kaore he tuhinga rite mo Habré, a, hei waahanga o te tuhi i nga raupapa tuhinga mo nga taputapu cmd kaore e taea te pa ki runga.

He Tohutoro:

Puna waehere puna
He poto mo te TFTP
Ko te mea ano, engari i roto i te Russian

Source: will.com

Tāpiri i te kōrero