Software scribens cum functionis client-servoris utilitates, pars 01

Ρ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ.

Hodie inspicere velim applicationes scriptionis clientis-servientis qui functiones Fenestrae vexillum exercent utilitates, ut Telnet, TFTP, et cetera, et cetera in puro Java. Patet me nihil novi - omnes hae utilitates plus uno anno feliciter laborasse, sed non credo omnes scire quid sub cucullo agatur.

Hoc ipsum est quod sub inciso agetur.

In hoc articulo, ne extrahatur, praeter generales informationes, de Telnet servo tantum scribam, sed in momento etiam materia in aliis utilitatibus est - in ulterioribus partibus seriei erit.

Primum indicare debes quid sit Telnet, quid opus sit, et quid adhibeatur. Fontes ad verbum non utar (si opus sit, nexum materiarum in argumento in fine articuli apponam), tantum dicam Telnet remotum accessum ad lineam artificii praecipere. Per et amplum, hoc est ubi fines eius officiati sunt (deliberate tacui de accessu ad portum, magis in illo postea). Hoc significat ut ad effectum deducendi, lineam in cliente accipere oportet, servo transmittere, conare ad lineam imperium transire, mandatum linea responsionis legere, si adsit, eam ad clientem transmittere et. illud in velum vel, si errores ostendat, cognoscat usor aliquid esse falsum.

Ad praedictam efficiendam, opus est 2 classes operariis et quibusdam probationibus classis e quibus servitorem deducemus et per quod client laborabit.
Quocirca in momento applicationis structuram includit;

  • TelnetClient
  • TelnetClientTester
  • TelnetServer
  • TelnetServerTester

Eamus per singula;

TelnetClient

Omnia haec classis mandata recepta mittendi facere ac responsa recepta monstrat. Praeterea opus arbitrarium (ut supra dictum est) portum remotum artificii coniungere et ab eo disiungere posse.

Ad hoc consequendum munera sequentia sunt adimpleta;

Munus quod nervum electronicum pro argumento sumit, nexum aperit et rivulos initus et output incipit (variabilis amnis supra declaratus est, fontes pleni in fine articuli sunt).

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

Idem munus obruunt, connectens cum defalta portu - hoc enim telnet 23


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

Munus legit characteres e tincidunt et eos mittit ad nervum output - quod est typicum, in linea modus, non modus characteris:


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

Munus data e nervum accipit et in scrinio ostendit


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

Munus sistit notitia receptionis et transmissionis


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

TelnetServer

Hoc genus debet habere functionem recipiendi mandatum ab neruo, illud ad executionem mittens, responsionem ex mandato remissas ad nervum mittens. Propositum deliberate data inputatio non retentat, quia primo, etiam in "telnet telnet" formare potest orbis servientis, secundo, eventus securitatis in hoc articulo omittitur in principio, et ideo non est. verbum de encryption vel SSL.

Munera tantum 2 sunt (una cumulatur), et in genere hoc non valde utilem usum, sed ad huius operis proposita, opportunum mihi visum est omnia relinquere, ut dictum est.

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

    }

Propositum servo portum aperit, notitia ex eo legit donec mandatum finis characteris incidat, mandatum ad novum processum transit, et output a processu ad nervum reducit. Omnia tam simplicia sunt quam vasa impetum Kalashnikov.

Ideoque onerare huic functioni cum defalta est;

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

Bene igitur munus, quod servo sistit etiam leve, ansam aeternam interrumpit, condicionem suam violat.

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

Classes examinare hic non dabo, infra sunt - omnia quae faciunt methodos publicarum functionis inspicias. Omnia in git.

Summatim, in duobus vesperis intelligere potes principia operationis principale consolandi utilitates. Nunc, cum telenet ad computatorium remotum, intellegimus quid agatur - magica evanuit)

So, nexus;
Omnes fontes fuerunt, sunt et hic erunt
De Telnet
Plus de Telnet

Source: www.habr.com