Ke kākau ʻana i nā lako polokalamu me ka hana o nā mea hoʻohana ʻo Windows client-server, ʻāpana 01

Aloha ʻoe.

I kēia lā, makemake au e nānā i ke kaʻina hana o ke kākau ʻana i nā noi client-server e hana ana i nā hana o nā pono Windows maʻamau, e like me Telnet, TFTP, a me nā mea ʻē aʻe, a me nā mea ʻē aʻe ma Java maʻemaʻe. ʻIke maopopo ʻaʻole wau e lawe mai i kahi mea hou - ua hana maikaʻi kēia mau pono āpau no hoʻokahi makahiki, akā ke manaʻoʻiʻo nei au ʻaʻole ʻike nā mea a pau i ka mea e hana nei ma lalo o ka pā.

ʻO kēia ka mea e kūkākūkāʻia ma lalo o kaʻoki.

Ma kēia ʻatikala, i ʻole e huki ʻia, ma kahi o ka ʻike maʻamau, e kākau wale wau e pili ana i ka server Telnet, akā i kēia manawa aia kekahi mea ma nā mea pono ʻē aʻe - aia ma nā ʻāpana ʻē aʻe o ka moʻo.

ʻO ka mea mua, pono ʻoe e noʻonoʻo i ke ʻano o Telnet, he aha ka mea e pono ai, a he aha ia e hoʻohana ai. ʻAʻole wau e haʻi i nā kumu kumu verbatim (inā pono, e hoʻopili wau i kahi loulou i nā mea e pili ana i ke kumuhana ma ka hopena o ka ʻatikala), e ʻōlelo wale wau e hāʻawi ʻo Telnet i kahi mamao mamao i ka laina kauoha o ka hāmeʻa. ʻO ka nui, ʻo ia kahi e pau ai kāna hana (Ua ʻoluʻolu wau i noho mālie e pili ana i ke komo ʻana i ke awa kikowaena; ʻoi aku ka nui ma hope). ʻO ia ke ʻano o ka hoʻokō ʻana, pono mākou e ʻae i kahi laina ma ka mea kūʻai aku, e hāʻawi iā ia i ke kikowaena, e hoʻāʻo e hāʻawi i ka laina kauoha, heluhelu i ka pane laina kauoha, inā aia kekahi, e hoʻihoʻi i ka mea kūʻai aku a e hōʻike iā ia ma ka pale, a i ʻole, inā he hewa, e hōʻike i ka mea hoʻohana ua hewa kekahi mea.

No ka hoʻokō ʻana i ka mea i luna, no laila, pono mākou i nā papa hana 2 a me kekahi papa hoʻāʻo kahi e hoʻomaka ai mākou i ke kikowaena a ma o ia ka mea e hana ai ka mea kūʻai aku.
No laila, i kēia manawa ua komo ka ʻōnaehana noi:

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

E hele kāua i kēlā me kēia o lākou:

TelnetClient

Hiki i kēia papa ke hana i nā kauoha i loaʻa a hōʻike i nā pane i loaʻa. Eia hou, pono ʻoe e hiki ke hoʻopili i kahi awa kūʻokoʻa (e like me ka mea i ʻōlelo ʻia ma luna) o kahi hāmeʻa mamao a kāpae ʻia mai ia.

No ka hoʻokō ʻana i kēia, ua hoʻokō ʻia nā hana penei:

ʻO kahi hana e lawe ai i kahi helu kumu ma ke ʻano he hoʻopaʻapaʻa, wehe i kahi pilina a hoʻomaka i nā kahawai hoʻokomo a hoʻopuka (hōʻike ʻia nā kahawai wai ma luna, aia nā kumu piha ma ka hopena o ka ʻatikala).

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

ʻO ka hoʻouka ʻana i ka hana like, e pili ana i ke awa paʻamau - no ka telnet ʻo 23 kēia


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

Heluhelu ka hana i nā huaʻōlelo mai ka papa keyboard a hoʻouna iā lākou i ke kumu puka - ʻo ia ka mea maʻamau, ma ke ʻano laina, ʻaʻole ke ʻano ʻano:


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

Loaʻa ka hana i ka ʻikepili mai ke kumu a hōʻike iā ia ma ka pale


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

Hoʻopau ka hana i ka loaʻa ʻana o ka ʻikepili a me ka lawe ʻana


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

TelnetServer

Pono kēia papa i ka hana o ka loaʻa ʻana o kahi kauoha mai kahi kumu, hoʻouna iā ia no ka hoʻokō ʻana, a hoʻouna i kahi pane mai ke kauoha e hoʻi i ke kumu. ʻAʻole nānā ka papahana i ka ʻikepili hoʻokomo, no ka mea, ʻo ka mea mua, ʻoiai ma ka "boxed telnet" hiki ke hoʻohālikelike i ka disk server, a ʻo ka lua, ua haʻalele ʻia ka pilikia o ka palekana ma kēia ʻatikala, a ʻo ia ke kumu ʻaʻole. he huaʻōlelo e pili ana i ka hoʻopunipuni a i ʻole SSL.

He 2 wale nō mau hana (ua hoʻonui ʻia kekahi o lākou), a ma ke ʻano maʻamau ʻaʻole ia he hana maikaʻi loa, akā no ke kumu o kēia hana, ua kūpono iaʻu e waiho i nā mea āpau e like me ia.

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

    }

Wehe ka polokalamu i ke awa kikowaena, heluhelu i ka ʻikepili mai ia mea a hiki i kona ʻike ʻana i kahi ʻano hoʻopau kauoha, hāʻawi i ke kauoha i kahi kaʻina hana hou, a hoʻihoʻi i ka hopena mai ke kaʻina hana i ke kumu. He mea maʻalahi nā mea a pau e like me ka pū hoʻouka kaua Kalashnikov.

No laila, aia kahi overload no kēia hana me kahi awa paʻamau:

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

ʻAe, no laila, he mea liʻiliʻi hoʻi ka hana e hoʻōki ai i ke kikowaena, hoʻopau ia i ka loop mau loa, e uhai ana i kona kūlana.

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

ʻAʻole wau e hāʻawi i nā papa hoʻāʻo ma ʻaneʻi, aia lākou ma lalo - ʻo kā lākou hana wale nō ke nānā i ka hana o nā ʻano lehulehu. Aia nā mea a pau ma ka git.

No ka hōʻuluʻulu ʻana, i nā ahiahi ʻelua hiki iā ʻoe ke hoʻomaopopo i nā loina o ka hana ʻana o nā mea pono console. I kēia manawa, ke telenet mākou i kahi kamepiula mamao, maopopo iā mākou ka mea e hana nei - ua nalowale ka kilokilo)

No laila, nā loulou:
Aia nā kumu a pau ma ʻaneʻi
No Telnet
Nā mea hou aku e pili ana iā Telnet

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka