Software ea ho ngola e nang le ts'ebetso ea lisebelisoa tsa Windows client-server, karolo ea 02

Ha re ntse re tsoela pele ka letoto le ntseng le tsoela pele la lingoliloeng tse reretsoeng ho kenya ts'ebetsong lits'ebetso tsa Windows console, re sitoa ho ama feela TFTP (Trivial File Transfer Protocol) - protocol e bonolo ea phetisetso ea lifaele.

Lekhetlong la ho qetela, ha re feteleng ka bokhutšoanyane khopolo-taba, re bone khoutu e sebelisang ts'ebetso e ts'oanang le e hlokahalang, 'me re e hlahlobe. Lintlha tse ling - tlas'a sehiloeng

Nke ke ka kopitsa tlhaiso-leseling ea litšupiso, lihokela tseo ka tloaelo li ka fumanoang qetellong ea sengoloa, ke tla re feela motheong oa eona, TFTP ke phapang e nolofalitsoeng ea protocol ea FTP, eo ho eona taolo ea phihlello e nang le eona. e tlositsoe, 'me ha e le hantle ha ho letho mona ntle le litaelo tsa ho amohela le ho fetisa faele. Leha ho le joalo, e le ho etsa hore ts'ebetsong ea rona e be ntle le ho lumellana le melao-motheo ea hona joale ea ho ngola khoutu, syntax e fetotsoe hanyenyane - sena ha se fetole melao-motheo ea ts'ebetso, empa sebopeho, IMHO, se fetoha se utloahalang haholoanyane. e kopanya likarolo tse ntle tsa FTP le TFTP.

Haholo-holo, ha moreki a qala, o kopa aterese ea IP ea seva le koung eo tloaelo ea TFTP e butsoeng ho eona (ka lebaka la ho se lumellane le protocol e tloaelehileng, ke ile ka bona ho loketse ho tlohela mosebelisi bokhoni ba ho khetha boema-kepe), kamora moo a khokahano e etsahala, ka lebaka leo moreki a ka romellang e 'ngoe ea litaelo - fumana kapa ho beha, ho amohela kapa ho romella faele ho seva. Lifaele tsohle li romelloa ka mokhoa oa binary ho nolofatsa mohopolo.

Ho kenya tšebetsong protocol, ke ne ke tloaetse ho sebelisa lihlopha tse 4:

  • TFTPClient
  • TFTPSSeva
  • TFTPClientTester
  • TFTPServerTester

Ka lebaka la hore litlelase tsa liteko li teng feela bakeng sa ho lokisa tse ka sehloohong, nke ke ka li sekaseka, empa khoutu e tla ba sebakeng sa polokelo; sehokelo sa eona se ka fumanoa qetellong ea sengoloa. Joale ke tla sheba lihlopha tse kholo.

TFTPClient

Mosebetsi oa sehlopha sena ke ho hokela ho seva e hole ka nomoro ea eona ea ip le port, bala taelo e tsoang ho molatsoana oa ho kenya (tabeng ena, keyboard), e hlalose, e fetisetse ho seva, 'me, ho latela hore na u hloka ho romela kapa ho amohela faele, ho e fetisa kapa ho e fumana.

Khoutu ea ho qala moreki hore a hokahane le seva ebe o emela taelo e tsoang ho molapo o kenang e shebahala tjena. Liphetoho tse ngata tsa lefats'e tse sebelisoang mona li hlalositsoe ka ntle ho sengoloa, mongolong o felletseng oa lenaneo. Ka lebaka la bosaoana ba tsona, ha ke li qotse e le hore ke se ke ka tlatsa sengoloa.

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

Ha re hlahlobeng mekhoa e bitsoang block of code ena:

Mona faele e romelloa - ho sebelisoa scanner, re hlahisa litaba tsa faele e le li-byte tse ngata, tseo re li ngolang ka bonngoe ho ea ho sokete, ka mor'a moo re e koala ebe re e bula hape (eseng tharollo e totobetseng, empa e tiisa ho lokolloa ha lisebelisoa), ka mor'a moo re bonts'a molaetsa mabapi le phetisetso e atlehileng.

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

Sekhechana sena sa khoutu se hlalosa ho khutlisa data ho tsoa ho seva. Ntho e 'ngoe le e' ngoe e boetse e nyenyane, ke karolo ea pele feela ea khoutu e thahasellisang. E le hore u utloisise hantle hore na ke li-byte tse kae tse lokelang ho baloa ho tloha soketeng, u lokela ho tseba hore na faele e fetisitsoeng e boima hakae. Boholo ba faele ho seva bo emeloa e le palo e telele, kahoo li-byte tse 4 li amoheloa mona, tseo ka mor'a moo li fetoloang ho ba nomoro e le 'ngoe. Ona ha se mokhoa oa Java haholo, o tšoana le SI, empa o rarolla bothata ba ona.

Joale ntho e 'ngoe le e' ngoe e nyenyane - re fumana palo e tsebahalang ea li-byte ho tloha soketeng ebe re li ngolla faeleng, ka mor'a moo re bonts'a molaetsa oa katleho.

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

Haeba taelo e 'ngoe ntle le ho fumana kapa ho beha e kentsoe fensetereng ea moreki, mosebetsi oa showErrorMessage o tla bitsoa, ​​ho bonts'a hore tlhahiso e ne e fosahetse. Ka lebaka la bosaoana, nke ke ka e qotsa. Ho khahlisang le ho feta ke mosebetsi oa ho amohela le ho arola khoele ea ho kenya. Re fetisetsa scanner ho eona, eo re lebeletseng ho fumana mohala o arohaneng ka libaka tse peli 'me e na le taelo, aterese ea mohloli le aterese ea moo u eang teng.

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

Ho romela taelo-ho fetisetsa taelo e kentsoeng ho tloha ho sekena ho ea ho sokete ebe e qobella hore e romeloe

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

Mokhethi ke mosebetsi o khethollang liketso tsa lenaneo ho itšetlehile ka khoele e kentsoeng. Ntho e 'ngoe le e' ngoe mona ha e ntle haholo 'me maqheka a sebelisitsoeng ha a molemo ka ho fetisisa ka ho tsoa ka ntle ho khoutu ea khoutu, empa lebaka le ka sehloohong la sena ke ho ba sieo ha Java ho lintho tse ling, joalo ka baemeli ba C #, lintlha tsa ts'ebetso ho tloha C ++, kapa ho bonyane e tšabehang le e tšabehang goto, e leng lumella u ho kenya tshebetsong sena ka bokhabane. Haeba u tseba ho etsa hore khoutu e be ntle haholoanyane, ke amohela ho nyatsuoa maikutlong. Ho 'na ho bonahala eka buka e hlalosang mantsoe ea String-delegate ea hlokahala mona, empa ha ho na moemeli ...

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

TFTPSSeva

Ts'ebetso ea seva e fapane le ts'ebetso ea moreki, ka kakaretso, feela ka hore litaelo li tle ho eona eseng ho keyboard, empa ho tsoa ho sokete. Mekhoa e meng ka kakaretso e ts'oana, kahoo nke ke ka e qotsa, ke tla ama liphapang feela.

Ho qala, ho sebelisoa mokhoa oa ho matha, o amohelang boema-kepe e le ho kenya letsoho mme o sebetsana le data ea ho kenya ho tsoa ho sokete ka loop e sa feleng.

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

Mokhoa oa ho beha, o koahelang mokhoa oa ho ngolaToFileFromSocket o bulang molapo oa ho ngola faeleng ebe o ngola li-byte tsohle tsa ho kenya ho tloha soketeng, o hatisa molaetsa o bonts'ang katleho ea phetisetso ha mongolo o phethela.

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

Mokhoa oa ho fumana o fumana faele ea seva. Joalokaha ho se ho boletsoe karolong e ka lehlakoreng la bareki ba lenaneo, ho fetisetsa faele ka katleho u hloka ho tseba boholo ba eona, e bolokiloeng ka palo e telele, kahoo ke e arola ka bongata ba li-byte tse 4, ke li fetisetsa ka byte-byte. ho ea soketeng, 'me joale, ha ke se ke li amohetse le ho li bokella ho mofani oa nomoro morao, ke fetisetsa li-byte tsohle tse etsang faele, tse baloang ho tsoa ho phallo e kenang ho tloha faeleng.


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

Mokhoa oa getAndParseInput o tšoana le oa moreki, phapang feela ke hore e bala data ho tsoa ho sokete ho fapana le keyboard. Khoutu e sebakeng sa polokelo, joalo ka mokhethi.
Tabeng ena, ho qalisoa ho behoa sebakeng se arohaneng sa khoutu, hobane ka hare ho ts'ebetsong ena, ka mor'a hore phetiso e phethoe, lisebelisoa li lokolloa 'me li tsosolosoe hape - hape ho fana ka tšireletso khahlanong le ho tsuba ha mohopolo.

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

Ho akaretsa:

Re sa tsoa ngola phapang ea rona ho protocol e bonolo ea phetisetso ea data mme re bone hore na e lokela ho sebetsa joang. Ha e le hantle, ha kea ka ka fumana Amerika mona mme ha kea ngola lintho tse ngata tse ncha, empa ho ne ho se na lihlooho tse tšoanang le tsa Habré, 'me e le karolo ea ho ngola letoto la lihlooho tse mabapi le lisebelisoa tsa cmd ho ne ho ke ke ha khoneha hore u se ke ua li ama.

Lipeeletso:

Sebaka sa polokelo ea khoutu
Ka bokhutšoanyane ka TFTP
Ntho e tšoanang, empa ka Serussia

Source: www.habr.com

Eketsa ka tlhaloso