Tusitala polokalame fa'atasi ma le fa'atinoga o mea faigaluega a le tagata fa'atau-tauva'a a le Windows, vaega 02

O le fa'aauauina pea o fa'asologa o tala fa'atatau i fa'atinoga fa'aleaganu'u o fa'aoga fa'amafanafanaga a Windows, e le mafai ona matou fesoasoani ae pa'i atu i luga o le TFTP (Trivial File Transfer Protocol) - o se fa'asologa faigofie o faila faila.

E pei o le taimi mulimuli, seʻi o tatou faʻapuupuu le aʻoaʻoga, vaʻai i le faʻailoga e faʻatinoina galuega tutusa ma le manaʻomia, ma iloilo. Fa'amatalaga atili - i lalo o le tipi

O le a ou le kopiina faʻamatalaga faʻamatalaga, o fesoʻotaʻiga e masani ona maua i le pito o le tusiga, o le a naʻo le mea autu, o le TFTP o se fesuiaiga faigofie o le FTP protocol, lea e iai le faʻatonuga o le avanoa. ua aveesea, ma o le mea moni e leai se mea iinei vagana ai poloaiga mo le mauaina ma le fesiitaiga o se faila . Ae ui i lea, ina ia mafai ona sili atu le matagofie o la tatou faʻatinoga ma faʻafetaui i mataupu faavae o loʻo i ai nei o le tusitusi code, o le syntax ua suia teisi - e le suia ai mataupu faavae o le gaioiga, ae o le atinaʻe, IMHO, ua sili atu ona talafeagai ma tu'ufa'atasia itu lelei o le FTP ma le TFTP.

Aemaise lava, pe a faʻalauiloa, e talosagaina e le kalani le tuatusi IP a le server ma le taulaga lea e tatala ai le TFTP masani (ona o le le ogatasi ma le faʻasologa masani, na ou manatu e talafeagai le tuʻuina atu i le tagata faʻaoga le tomai e filifili ai se uafu), a maeʻa a fesoʻotaʻiga e tupu, o se taunuuga e mafai ai e le kalani ona tuʻuina atu se tasi o poloaiga - maua pe tuʻu, e maua pe lafo se faila i le server. O faila uma e lafo i le binary mode e faafaigofie ai le manatu.

Ina ia faʻatinoina le faʻasalalauga, sa masani ona ou faʻaaogaina vasega 4:

  • TFTPClient
  • TFTPSserver
  • TFTPClientTester
  • TFTPServerTester

Ona o le mea moni o vasega suʻega e naʻo le faʻaaogaina o mea autu, o le a ou le suʻeina, ae o le code o le a i totonu o le fale teu oloa e mafai ona maua i le pito o le tusiga; O lenei o le a ou tilotilo i vasega autu.

TFTPClient

O le galuega a lenei vasega o le faʻafesoʻotaʻi i se server mamao e faʻaaoga ai lona ip ma le numera o le taulaga, faitau se faʻatonuga mai le faʻaogaina o le vaitafe (i lenei tulaga, le piano), faʻapipiʻi, faʻafeiloaʻi i le server, ma, faʻalagolago pe e te mana'omia e lafo pe maua se faila, fa'aliliu pe maua.

O le code mo le tatalaina o le kalani e faʻafesoʻotaʻi i le 'auʻaunaga ma faʻatali mo se faʻatonuga mai le faʻaogaina o le vaitafe e pei o lenei. O le tele o fesuiaiga o le lalolagi o loʻo faʻaaogaina iinei o loʻo faʻamatalaina i fafo atu o le tusiga, i le anotusi atoa o le polokalame. Ona o lo latou fa'atauva'a, ou te le ta'ua i latou ina ia aua ne'i ova le tala.

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

Sei o tatou agai i luga o metotia ua taʻua i lenei poloka o code:

O iinei o loʻo tuʻuina atu ai le faila - e faʻaaoga ai se scanner, matou te tuʻuina atu mea o loʻo i totonu o le faila o se faʻasologa o bytes, lea matou te tusia taʻitasi i le socket, ona matou tapunia lea ma toe tatala (e le o le fofo sili ona manino, ae e faʻamaonia le tuʻuina atu o punaoa), a maeʻa ona matou faʻaalia se feʻau e uiga i le fesiitaiga manuia.

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

O lenei vaega fa'ailoga o lo'o fa'amatalaina le toe maua mai o fa'amatalaga mai le server. O mea uma ua toe faʻatauvaʻa, naʻo le poloka muamua o code e fiafia. Ina ia malamalama lelei pe fia le tele o bytes e manaʻomia ona faitau mai le socket, e tatau ona e iloa le mamafa o le faila faila. O le faila faila i luga o le 'auʻaunaga o loʻo faʻatusalia o se numera umi, o lea e talia ai 4 bytes iinei, lea e mulimuli ane liua i se numera tasi. E le o se faiga Java tele lea, e foliga tutusa mo le SI, ae foia lona faafitauli.

Ona leai lea o mea uma - matou te mauaina se numera iloa o bytes mai le socket ma tusi i latou i se faila, ona matou faʻaalia lea o se feʻau manuia.

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

Afai o se poloaiga e ese mai i le mauaina poʻo le tuʻuina na tuʻuina i totonu o le faamalama o le kalani, o le showErrorMessage galuega o le a valaʻau, e faʻaalia ai e le saʻo le faʻaoga. Ona o le le taua, ou te le ta'ua. E sili atu le manaia o le galuega o le mauaina ma le vaeluaina o le manoa ulufale. Matou te pasi atu le scanner i totonu, lea matou te faʻamoemoe e maua ai se laina e vaelua avanoa e lua ma o loʻo i ai le faʻatonuga, tuatusi faʻapogai ma tuatusi nofoaga.

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

Tuuina atu o se poloaiga—e auina atu le poloaiga na tuu mai i le sikola i le socket ma faamalosia e auina atu

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

O le tagata filifilia o se galuega e fuafua ai gaioiga a le polokalame e fa'atatau i le manoa na tu'uina. O mea uma iinei e le matagofie tele ma o le togafiti e faʻaaogaina e le o se mea e sili ona lelei ma faʻamalosi e alu ese i fafo atu o le poloka poloka, ae o le mafuaaga autu o lenei mea o le toesea i Java o nisi mea, e pei o sui i C #, faʻailoga galuega mai C ++, poʻo i. sili ona leaga ma le mataʻutia goto, lea e mafai ai ona e faʻatinoina lenei mea matagofie. Afai e te iloa pe faʻafefea ona fai le faʻailoga e sili atu le matagofie, ou te faʻafeiloaʻi faitioga i faʻamatalaga. E foliga mai ia te aʻu e manaʻomia se lomifefiloi String-delegate iinei, ae e leai se sui ...

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

TFTPSserver

O le faʻatinoga o le 'auʻaunaga e ese mai le faʻatinoga a le kalani, i le lautele, naʻo na o poloaiga e sau i ai e le mai le piano, ae mai le socket. O nisi o metotia e masani lava ona tutusa, o lea o le a ou le taʻua ai, o le a ou paʻi atu i eseesega.

Ina ia amata, e faʻaaogaina le auala taʻavale, lea e maua ai se taulaga e fai ma faʻaoga ma faʻagasolo faʻamatalaga faʻapipiʻi mai le socket i se matasele e faʻavavau.

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

O le auala tu'u, lea e afifi ai le writeToFileFromSocket method e tatala ai se tafega tusitusi i se faila ma tusi uma mea e sao mai i le socket, e fa'aalia ai se fe'au e fa'ailoa ai le fa'amae'a manuia o le fesiitaiga pe a mae'a le tusi.

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

O le auala e maua ai le faila faila. E pei ona uma ona taʻua i le vaega i le itu o le tagata o tausia o le polokalame, ina ia manuia le fesiitaiga o se faila e tatau ona e iloa lona tele, teuina i se numera umi, o lea na ou vaevaeina ai i se laina o 4 bytes, faʻafeiloaʻi i latou byte-by-byte i le socket, ona maua lea ma faʻapipiʻi i luga o le kalani i se numera i tua, ou te faʻafeiloaʻi uma bytes e fai ai le faila, faitau mai le vaitafe faʻapipiʻi mai le faila.


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

Ole auala getAndParseInput e tutusa ma le tagata o tausia, pau le eseesega o le faitau faʻamatalaga mai le socket nai lo le piano. O le code o loʻo i totonu o le fale teu oloa, pei o le tagata filifilia.
I lenei tulaga, o le amataga o loʻo tuʻuina i se isi poloka o le code, aua i totonu o lenei faʻatinoga, pe a maeʻa le fesiitaiga, e faʻasaʻoloto punaoa ma toe nofoia - toe tuʻuina atu le puipuiga mai le faʻaogaina o mafaufauga.

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

I se aotelega:

Faatoa matou tusia a matou lava fesuiaiga i luga o se faʻamatalaga faigofie faʻafeiloaʻi ma mafaufau pe faʻafefea ona aoga. I le mataupu faavae, ou te leʻi mauaina Amerika iinei ma e leʻi tusia ni mea fou, ae e leai ni tala tutusa i luga o Habré, ma o se vaega o le tusiaina o se faasologa o tala e uiga i le cmd utilities e le mafai ona paʻi i ai.

Faʻamatalaga:

Fa'amaumauga fa'ailoga puna
Fa'apuupuu e uiga i le TFTP
Le mea lava e tasi, ae i Rusia

puna: www.habr.com

Faaopoopo i ai se faamatalaga