Sau software nrog kev ua haujlwm ntawm Windows client-server utilities, ntu 01

Txais tos.

Hnub no kuv xav saib cov txheej txheem ntawm kev sau cov neeg siv-server daim ntawv thov uas ua haujlwm ntawm cov qauv siv Windows, xws li Telnet, TFTP, thiab lwm yam, thiab lwm yam hauv Java ntshiab. Nws yog qhov tseeb tias kuv yuav tsis nqa dab tsi tshiab - tag nrho cov khoom siv hluav taws xob no tau ua haujlwm zoo rau ntau tshaj ib xyoos, tab sis kuv ntseeg tias tsis yog txhua tus paub tias muaj dab tsi tshwm sim hauv qab hood.

Qhov no yog raws nraim li cas yuav tau tham nyob rau hauv lub txiav.

Hauv tsab xov xwm no, txhawm rau kom tsis txhob rub nws tawm, ntxiv rau cov ntaub ntawv dav dav, kuv tsuas yog yuav sau txog Telnet server, tab sis tam sim no tseem muaj cov khoom siv ntawm lwm cov khoom siv hluav taws xob - nws yuav yog nyob rau hauv txuas ntxiv ntawm cov koob.

Ua ntej tshaj plaws, koj yuav tsum paub seb Telnet yog dab tsi, nws xav tau dab tsi rau, thiab nws siv rau dab tsi. Kuv yuav tsis hais cov peev txheej verbatim (yog tias tsim nyog, kuv yuav muab qhov txuas rau cov ntaub ntawv ntawm lub ncauj lus kawg ntawm tsab xov xwm), Kuv tsuas yog hais tias Telnet muab cov chaw taws teeb nkag mus rau cov kab hais kom ua ntawm lub cuab yeej. Los ntawm thiab loj, qhov no yog qhov uas nws functionality xaus (Kuv txhob txwm ua ntsiag to txog kev nkag mus rau lub server chaw nres nkoj; ntxiv rau tom qab ntawd). Qhov no txhais tau hais tias kom siv tau, peb yuav tsum tau txais ib kab ntawm tus neeg siv khoom, xa nws mus rau tus neeg rau zaub mov, sim hla nws mus rau kab hais kom ua, nyeem cov kab lus teb, yog tias muaj, xa rov qab rau tus neeg siv khoom thiab tso rau ntawm qhov screen, lossis, yog tias ua yuam kev, qhia rau tus neeg siv paub tias qee yam tsis raug.

Txhawm rau ua raws li cov saum toj no, raws li, peb xav tau 2 chav ua haujlwm thiab qee chav xeem uas peb yuav tso tawm cov neeg rau zaub mov thiab los ntawm cov neeg siv khoom yuav ua haujlwm.
Raws li txoj cai, tam sim no daim ntawv thov qauv suav nrog:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

Cia peb mus dhau ntawm lawv txhua tus:

TelnetClient

Tag nrho cov chav kawm no yuav tsum muaj peev xwm ua tau yog xa cov lus txib tau txais thiab qhia cov lus teb tau txais. Tsis tas li ntawd, koj yuav tsum muaj peev xwm txuas mus rau qhov kev txiav txim siab (raws li tau hais los saum toj no) chaw nres nkoj ntawm lub chaw taws teeb thiab txiav tawm ntawm nws.

Yuav kom ua tiav qhov no, cov haujlwm hauv qab no tau muab coj los siv:

Ib txoj haujlwm uas siv lub qhov (socket) qhov chaw nyob raws li kev sib cav, qhib kev sib txuas thiab pib nkag thiab tawm cov kwj deg (kwj hloov pauv tau tshaj tawm saum toj no, tag nrho cov peev txheej yog qhov kawg ntawm tsab xov xwm).

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

Overloading tib lub luag haujlwm, txuas mus rau qhov chaw nres nkoj default - rau telnet qhov no yog 23


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

Lub luag haujlwm nyeem cov cim ntawm cov keyboard thiab xa lawv mus rau qhov tso zis tso zis - uas yog ib txwm, hauv kab hom, tsis yog hom cim:


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

Lub luag haujlwm tau txais cov ntaub ntawv los ntawm lub qhov (socket) thiab qhia nws ntawm qhov screen


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

Qhov kev ua haujlwm nres cov ntaub ntawv txais thiab xa tawm


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

TelnetServer

Cov chav kawm no yuav tsum muaj kev ua haujlwm ntawm kev txais cov lus txib los ntawm lub qhov (socket), xa mus rau kev ua tiav, thiab xa cov lus teb los ntawm cov lus txib rov qab mus rau lub qhov (socket). Qhov kev zov me nyuam txhob txwm tsis txheeb xyuas cov ntaub ntawv tawm tswv yim, vim tias thawj zaug, txawm tias nyob rau hauv "boxed telnet" nws muaj peev xwm format lub server disk, thiab qhov thib ob, qhov teeb meem ntawm kev ruaj ntseg hauv kab lus no raug tshem tawm hauv txoj cai, thiab yog vim li cas tsis muaj. ib lo lus hais txog encryption lossis SSL.

Muaj tsuas yog 2 lub luag haujlwm (ib qho ntawm lawv yog overloaded), thiab feem ntau qhov no tsis yog ib qho kev xyaum zoo heev, tab sis rau lub hom phiaj ntawm txoj haujlwm no, nws zoo li tsim nyog rau kuv tawm txhua yam raws li nws yog.

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

    }

Qhov kev zov me nyuam qhib qhov chaw nres nkoj neeg rau zaub mov, nyeem cov ntaub ntawv los ntawm nws kom txog rau thaum nws ntsib qhov kev hais kom ua tiav, hla cov lus txib mus rau txheej txheem tshiab, thiab xa cov khoom tawm los ntawm cov txheej txheem mus rau lub qhov (socket). Txhua yam yog yooj yim li Kalashnikov phom phom.

Raws li, muaj ntau dhau rau qhov ua haujlwm no nrog lub chaw nres nkoj default:

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

Zoo, raws li, txoj haujlwm uas nres cov neeg rau zaub mov kuj tseem tsis tseem ceeb, nws cuam tshuam lub voj nyob mus ib txhis, ua txhaum nws qhov xwm txheej.

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

Kuv yuav tsis muab cov chav kawm ntawm no, lawv nyob hauv qab no - txhua yam lawv ua yog kuaj xyuas cov haujlwm ntawm pej xeem txoj kev. Txhua yam yog nyob ntawm git.

Txhawm rau xaus, ob peb yav tsaus ntuj koj tuaj yeem nkag siab cov ntsiab lus ntawm kev ua haujlwm ntawm cov khoom siv hluav taws xob tseem ceeb. Tam sim no, thaum peb telenet mus rau lub computer tej thaj chaw deb, peb to taub dab tsi tshwm sim - cov khawv koob tau ploj lawm)

Yog li, cov links:
Txhua qhov chaw tau, yog thiab yuav nyob ntawm no
Hais txog Telnet
Xav paub ntau ntxiv txog Telnet

Tau qhov twg los: www.hab.com

Ntxiv ib saib