Kunyora software nekushanda kweWindows client-server utilities, chikamu 01

Kwaziwai.

Nhasi ndinoda kutarisa maitiro ekunyora macustomer-server application anoita mabasa eakajairika Windows zvishandiso, seTelnet, TFTP, et cetera, et cetera muJava yakachena. Zviripachena kuti handisi kuzounza chero chinhu chitsva - zvese izvi zvinoshandiswa zvave kushanda zvinobudirira kweanopfuura gore, asi ndinotenda kuti havasi vese vanoziva zviri kuitika pasi pehodhi.

Izvi ndizvo chaizvo zvichakurukurwa pasi pekucheka.

Muchikamu chino, kuti ndirege kuikwevera kunze, kuwedzera kune ruzivo rwakawanda, ini ndinongonyora nezveTelnet server, asi panguva ino panewo zvinhu pane zvimwe zvinoshandiswa - zvichave mune zvimwe zvikamu zvezvikamu.

Chekutanga pane zvese, iwe unofanirwa kuona kuti Telnet chii, chii chinodiwa, uye chii chainoshandiswa. Ini handisi kuzotora zvinyorwa verbatim (kana zvichidikanwa, ini ndichaisa chinongedzo kune zvigadzirwa pane iyo nyaya pakupera kwechinyorwa), ini ndinongotaura kuti Telnet inopa kure kure kune yekuraira mutsara wechigadzirwa. Kakawanda, apa ndipo panopera kushanda kwayo (ini ndakaramba ndakanyarara nemaune nezve kuwana server port; zvimwe pane izvo gare gare). Izvi zvinoreva kuti kuti tiite, tinoda kubvuma mutsara pane mutengi, toupfuudza kune sevha, edza kuupfuudza kumutsara wekuraira, verenga mhinduro yemutsetse wemirairo, kana iripo, ipfuudze kumutengi uye ratidza pachiratidziro, kana, kana zvikanganiso, ita kuti mushandisi azive kuti pane chakashata.

Kuti tiite zviri pamusoro, zvinoenderana, tinoda 2 makirasi ekushanda uye imwe kirasi yebvunzo kubva kwatinozovhura sevha uye kuburikidza iyo mutengi achashanda.
Naizvozvo, panguva ino chimiro chekushandisa chinosanganisira:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

Ngatitarisei pane imwe neimwe yadzo:

TelnetClient

Yese iyi kirasi inofanirwa kukwanisa kuita kutumira yakagamuchirwa mirairo uye kuratidza mhinduro dzakagamuchirwa. Mukuwedzera, iwe unofanirwa kukwanisa kubatana kune inopokana (sezvataurwa pamusoro) chiteshi chemudziyo uri kure uye bvisa kubva pairi.

Kuti izvi zviitike, mabasa anotevera akaitwa:

Basa rinotora kero yesoketi senharo, rinovhura chinongedzo uye rotanga kupinza uye kubuda nzizi (rukova mutsauko unoziviswa pamusoro, masosi akazara ari pakupera kwechinyorwa).

 public void run(String ip, int port)
    {
        try {
            Socket socket = new Socket(ip, port);
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            Scanner keyboard = new Scanner(System.in);
            reader = new Thread(()->read(keyboard, sout));
            writer = new Thread(()->write(sin));
            reader.start();
            writer.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

Kuwedzeredza basa rimwe chete, kubatanidza kune default port - ye telnet iyi 23


    public void run(String ip)
    {
        run(ip, 23);
    }

Basa racho rinoverenga mavara kubva kukhibhodi uye rotumira kune inobuda socket - inowanzoitika, mumutsara modhi, kwete maitiro emhando:


    private void read(Scanner keyboard, OutputStream sout)
    {
        try {
            String input = new String();
            while (true) {
                input = keyboard.nextLine();
                for (char i : (input + " n").toCharArray())
                    sout.write(i);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

Basa racho rinogamuchira data kubva kune socket uye rinoratidza pahwindo


    private void write(InputStream sin)
    {
        try {
            int tmp;
            while (true){
                tmp = sin.read();
                System.out.print((char)tmp);
            }
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

Basa racho rinomisa kugamuchirwa kwedata uye kutapurirana


    public void stop()
    {
        reader.stop();
        writer.stop();
    }
}

TelnetServer

Iyi kirasi inofanirwa kuve nekushanda kwekugamuchira murairo kubva kune socket, kuitumira kuti iitwe, uye kutumira mhinduro kubva kumurairo kudzokera kune socket. Iyo purogiramu nemaune haitarise iyo data yekupinza, nekuti chekutanga, kunyangwe mu "boxed telnet" zvinokwanisika kufomati sevha dhisiki, uye chechipiri, nyaya yechengetedzo muchinyorwa chino inosiiwa mumutemo, uye ndosaka pasina. izwi nezve encryption kana SSL.

Pane mabasa maviri chete (rimwe rawo rinoremerwa), uye kazhinji iyi haisi tsika yakanaka kwazvo, asi nokuda kwezvinangwa zvebasa iri, zvakaratidzika zvakakodzera kwandiri kuti ndisiye zvose sezvazviri.

 boolean isRunning = true;
    public void run(int port)    {

        (new Thread(()->{ try {
            ServerSocket ss = new ServerSocket(port); // создаСм сокСт сСрвСра ΠΈ привязываСм Π΅Π³ΠΎ ΠΊ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ
            System.out.println("Port "+port+" is waiting for connections");

            Socket socket = ss.accept();
            System.out.println("Connected");
            System.out.println();

            // Π‘Π΅Ρ€Π΅ΠΌ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ сокСта, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            Map<String, String> env = System.getenv();
            String wayToTemp = env.get("TEMP") + "tmp.txt";
            for (int i :("Connectednnr".toCharArray()))
                sout.write(i);
            sout.flush();

            String buffer = new String();
            while (isRunning) {

                int intReader = 0;
                while ((char) intReader != 'n') {
                    intReader = sin.read();
                    buffer += (char) intReader;
                }


                final String inputToSubThread = "cmd /c " + buffer.substring(0, buffer.length()-2) + " 2>&1";


                new Thread(()-> {
                    try {

                        Process p = Runtime.getRuntime().exec(inputToSubThread);
                        InputStream out = p.getInputStream();
                        Scanner fromProcess = new Scanner(out);
                        try {

                            while (fromProcess.hasNextLine()) {
                                String temp = fromProcess.nextLine();
                                System.out.println(temp);
                                for (char i : temp.toCharArray())
                                    sout.write(i);
                                sout.write('n');
                                sout.write('r');
                            }
                        }
                        catch (Exception e) {
                            String output = "Something gets wrong... Err code: "+ e.getStackTrace();
                            System.out.println(output);
                            for (char i : output.toCharArray())
                                sout.write(i);
                            sout.write('n');
                            sout.write('r');
                        }

                        p.getErrorStream().close();
                        p.getOutputStream().close();
                        p.getInputStream().close();
                        sout.flush();

                    }
                    catch (Exception e) {
                        System.out.println("Error: " + e.getMessage());
                    }
                }).start();
                System.out.println(buffer);
                buffer = "";

            }
        }
        catch(Exception x) {
            System.out.println(x.getMessage());
        }})).start();

    }

Iyo purogiramu inovhura sevha yevhavha, inoverenga data kubva kwairi kusvika yasangana nemirairo yekupedzisira hunhu, inopfuudza iwo murairo kune itsva maitiro, uye inodzoreredza zvakabuda kubva pakuita kusvika kune socket. Zvese zviri nyore seKalashnikov pfuti yekurova.

Naizvozvo, pane kuwandisa kweichi basa rine default port:

 public void run()
    {
        run(23);
    }

Zvakanaka, maererano, basa rinomisa sevha zvakare risingakoshi, rinokanganisa kusingaperi loop, kuputsa mamiriro ayo.

    public void stop()
    {
        System.out.println("Server was stopped");
        this.isRunning = false;
    }

Ini handisi kuzopa makirasi ebvunzo pano, ari pazasi - zvese zvavanoita kutarisa kushanda kwenzira dzeveruzhinji. Zvese zviri pagit.

Kupfupisa, manheru mashoma iwe unogona kunzwisisa misimboti yekushanda kweiyo huru console zvishandiso. Zvino, kana isu tichifonera kune komputa iri kure, isu tinonzwisisa zviri kuitika - mashiripiti anyangarika)

Saka, iyo links:
Ese masosi aive, aripo uye achange ari pano
About Telnet
Zvimwe pamusoro peTelnet

Source: www.habr.com

Voeg