Edemede sọftụwia nwere ọrụ nke ihe nkesa ndị ahịa-Windows, akụkụ 02

N'ịga n'ihu usoro akụkọ na-aga n'ihu na-etinye aka na mmejuputa iwu nke ngwa njikwa Windows, anyị enweghị ike inye aka kama imetụ TFTP (Protocol Nyefee Faịlụ obere) - usoro mbufe faịlụ dị mfe.

Dị ka oge ikpeazụ, ka anyị lebakwuo anya nkenke echiche, hụ koodu na-arụ ọrụ yiri nke achọrọ, wee nyochaa ya. Nkọwa ndị ọzọ - n'okpuru ịkpụ

Agaghị m detuo-tapawa ozi ntụaka, njikọ nke enwere ike ịchọta na njedebe nke akụkọ a, m ga-ekwu na na isi ya, TFTP bụ mgbanwe dị mfe nke usoro FTP, nke ntọala njikwa ohere. ewepụrụ, na n'ezie ọ dịghị ihe ọ bụla ebe a ma e wezụga iwu maka ịnata na ịnyefe faịlụ . Otú ọ dị, iji mee ka mmejuputa anyị dị ntakịrị mma ma na-emegharị na ụkpụrụ nke koodu ederede ugbu a, syntax a gbanwere ntakịrị - nke a adịghị agbanwe ụkpụrụ nke ọrụ, ma interface, IMHO, na-aghọ ihe ezi uche dị na ya na. na-ejikọta akụkụ dị mma nke FTP na TFTP.

Karịsịa, mgbe emebere ya, onye ahịa na-arịọ adreesị IP nke ihe nkesa na ọdụ ụgbọ mmiri nke omenala TFTP na-emeghe (n'ihi enweghị nkwekọrịta na ụkpụrụ ọkọlọtọ, echere m na ọ dị mma ịhapụ onye ọrụ ikike ịhọrọ ọdụ ụgbọ mmiri), mgbe nke a gasịrị njikọ na-eme, n'ihi nke onye ahịa nwere ike izipu otu n'ime iwu - nweta ma ọ bụ tinye, ịnata ma ọ bụ zipu faịlụ na ihe nkesa. A na-eziga faịlụ niile n'ụdị ọnụọgụ abụọ ka ọ dị mfe nghọta.

Iji mejuputa protocol ahụ, ejiri m klaasị 4 mee ihe:

  • TFTPClient
  • TFTPSserver
  • TFTPClientTester
  • TFTPSserverTester

N'ihi n'eziokwu na klaasị ule dị naanị maka imebi ihe ndị bụ isi, agaghị m enyocha ha, mana koodu ahụ ga-adị na ebe nchekwa ahụ, enwere ike ịchọta njikọ ya na njedebe nke isiokwu ahụ. Ugbu a, m ga-ele anya na klas ndị bụ isi.

TFTPClient

Ọrụ nke klas a bụ ijikọ na ihe nkesa dịpụrụ adịpụ site na iji ip na nọmba ọdụ ụgbọ mmiri ya, gụọ iwu sitere na iyi ntinye (na nke a, keyboard), gbasaa ya, nyefee ya na ihe nkesa, na, dabere ma ị nwere. mkpa izipu ma ọ bụ nata faịlụ, nyefee ya ma ọ bụ nweta.

Koodu maka ịmalite onye ahịa iji jikọọ na ihe nkesa wee chere maka iwu sitere na iyi ntinye dị ka nke a. A na-akọwa ọnụọgụ mgbanwe zuru ụwa ọnụ nke a na-eji ebe a na-abụghị isiokwu, na ederede zuru ezu nke mmemme ahụ. N'ihi ihe na-adịghị mkpa ha, anaghị m akọwa ha ka ha ghara ibufe akụkọ ahụ.

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

Ka anyị gafee usoro a na-akpọ na ngọngọ koodu a:

N'ebe a, a na-eziga faịlụ ahụ - site na iji nyocha, anyị na-enye ọdịnaya nke faịlụ ahụ dị ka nhazi nke bytes, nke anyị na-ede otu otu na oghere, mgbe nke ahụ gasịrị, anyị na-emechi ya ma mepee ya ọzọ (ọ bụghị ihe ngwọta doro anya, ma. ọ na-ekwe nkwa ntọhapụ nke akụrụngwa), mgbe nke ahụ gasịrị, anyị na-egosipụta ozi gbasara mbufe na-aga nke ọma.

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

Mpempe koodu a na-akọwa iweghachite data na sava ahụ. Ihe niile dị ntakịrị ọzọ, naanị ngọngọ mbụ nke koodu bụ mmasị. Iji ghọta kpọmkwem ole bytes kwesịrị ịgụ site na oghere, ị ga-achọ ịma ole faịlụ bufere ya. A na-anọchi anya nha faịlụ dị na ihe nkesa dị ka ogologo integer, ya mere a na-anabata bytes 4 ebe a, nke emesịa ghọọ otu nọmba. Nke a abụghị ụzọ Java, ọ dị ka SI, mana ọ na-edozi nsogbu ya.

Mgbe ahụ, ihe niile dị ntakịrị - anyị na-enweta ọnụ ọgụgụ a maara nke bytes site na oghere wee dee ha na faịlụ, mgbe nke ahụ gasịrị, anyị na-egosipụta ozi ịga nke ọma.

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

Ọ bụrụ na abanyenyere iwu na-abụghị ịnweta ma ọ bụ tinye n'ime windo ndị ahịa, a ga-akpọ ọrụ ngosiErrorMessage, na-egosi na ntinye ezighi ezi. N'ihi obere ihe, agaghị m akọwa ya. Ihe na-adọrọ mmasị karị bụ ọrụ nke ịnata na ikewa eriri ntinye. Anyị na-agafe nyocha n'ime ya, site na nke anyị na-atụ anya ịnweta ahịrị nke oghere abụọ kewara ma nwee iwu, adreesị isi na adreesị ebe.

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

Izipu iwu-na-ebufe iwu etinyere site na nyocha gaa na oghere wee manye ka izipu ya

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

Onye nhọpụta bụ ọrụ na-ekpebi mmemme mmemme dabere na eriri etinyere. Ihe niile dị ebe a adịghị mma nke ukwuu na aghụghọ a na-eji abụghị nke kachasị mma na ọpụpụ mmanye n'èzí koodu ngọngọ, ma isi ihe kpatara nke a bụ enweghị Java nke ihe ụfọdụ, dị ka ndị nnọchiteanya na C #, ọrụ pointers si C ++, ma ọ bụ na ọ dịkarịa ala goto dị egwu na nke dị egwu, nke na-enye gị ohere imejuputa nke a nke ọma. Ọ bụrụ na ị maara ka esi eme ka koodu ahụ dịkwuo mma, ana m anabata nkatọ na nkwupụta. Ọ dị m ka achọrọ akwụkwọ ọkọwa okwu String-delegate ebe a, mana enweghị onye nnọchite anya...

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

TFTPSserver

Ọrụ nke ihe nkesa dị iche na ọrụ nke onye ahịa, site na nnukwu, naanị na iwu na-abịakwute ya ọ bụghị site na keyboard, kama site na oghere. Ụfọdụ n'ime ụzọ ndị ahụ na-adịkarị otu, ya mere, agaghị m akọwa ha, naanị m ga-emetụ aka na ọdịiche dị iche iche.

Iji malite, a na-eji usoro ịgba ọsọ, nke na-enweta ọdụ ụgbọ mmiri dị ka ntinye ma na-edozi data ntinye site na oghere na akaghị ebighị ebi.

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

Usoro etinyere, nke kechie usoro writeToFileFromSocket nke na-emepe iyi ide na faịlụ wee dee bytes ntinye niile site na oghere, na-egosiputa ozi na-egosi mmecha mbufe nke ọma mgbe edere ya.

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

Usoro nweta na-eweghachite faịlụ nkesa. Dị ka e kwuru na ngalaba dị n'akụkụ ndị ahịa nke mmemme ahụ, iji nyefee faịlụ nke ọma, ịkwesịrị ịma nha ya, echekwara na ọnụọgụ ogologo, yabụ m kewaa ya n'usoro nke 4 bytes, nyefee ha byte-by-byte. na oghere, mgbe ahụ, na-enweta ma kpọkọta ha na onye ahịa n'ime nọmba azụ, m na-ebufe bytes niile nke mejupụtara faịlụ ahụ, gụọ site na ntinye ntinye site na faịlụ ahụ.


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

Usoro getAndParseInput bụ otu ihe dị na onye ahịa, naanị ihe dị iche bụ na ọ na-agụ data sitere na oghere kama site na ahụigodo. Koodu dị na ebe nchekwa, dị ka onye nhọpụta.
N'okwu a, a na-etinye mmalite mmalite na ngọngọ nke koodu dị iche, n'ihi na N'ime mmejuputa a, mgbe emechara mbufe ahụ, a na-ewepụta ihe onwunwe ma weghachi ya ọzọ - ọzọ iji nye nchebe pụọ na nkwụsị ebe nchekwa.

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

Iji chịkọta:

Anyị edeela ụdịdị nke anyị na usoro mbufe data dị mfe wee chọpụta ka ọ ga-esi arụ ọrụ. N'ụkpụrụ, achọpụtaghị m America ebe a ma edeghị m ọtụtụ ihe ọhụrụ, mana ọ nweghị akụkọ yiri nke ahụ na Habré, yana dịka akụkụ nke ide usoro isiokwu gbasara cmd utilities ọ gaghị ekwe omume ịghara imetụ ya aka.

Ntughari:

Ebe nchekwa koodu isi mmalite
Na nkenke gbasara TFTP
Otu ihe ahụ, ma na Russian

isi: www.habr.com

Tinye a comment