{"id":36378,"date":"2019-10-31T22:11:20","date_gmt":"2019-10-31T19:11:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01\/"},"modified":"2019-10-31T22:11:20","modified_gmt":"2019-10-31T19:11:20","slug":"napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01","title":{"rendered":"V\u00fdvoj softwaru s funkcemi klient-server n\u00e1stroj\u016f pro Windows, \u010d\u00e1st 01","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dobr\u00fd den.<\/p>\n<p>Dnes bych cht\u011bl probrat proces psan\u00ed klient-serverov\u00fdch aplikac\u00ed, kter\u00e9 vykon\u00e1vaj\u00ed funkce standardn\u00edch utilit Windows, jako jsou Telnet, TFTP a dal\u0161\u00ed. Je jasn\u00e9, \u017ee nep\u0159in\u00e1\u0161\u00edm nic nov\u00e9ho \u2014 v\u0161echny tyto utility ji\u017e \u00fasp\u011b\u0161n\u011b funguj\u00ed \u0159adu let, ale mysl\u00edm, \u017ee co se skr\u00fdv\u00e1 pod kapotou, nev\u00ed ka\u017ed\u00fd.<\/p>\n<p>O tom se bude mluvit v n\u00e1sleduj\u00edc\u00edm textu. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nV tomto \u010dl\u00e1nku, abychom ho nezdr\u017eovali, budu ps\u00e1t pouze o Telnet serveru, ale v tuto chv\u00edli m\u00e1m tak\u00e9 materi\u00e1l k dal\u0161\u00edm utilit\u00e1m \u2014 ten bude v dal\u0161\u00edch \u010d\u00e1stech cyklu.<\/p>\n<p>Nejprve je pot\u0159eba objasnit, co to vlastn\u011b Telnet je, k \u010demu slou\u017e\u00ed a jak se pou\u017e\u00edv\u00e1. Nebudu doslovn\u011b citovat zdroje (pokud budete pot\u0159ebovat \u2014 na konci \u010dl\u00e1nku p\u0159ipoj\u00edm odkazy na materi\u00e1ly k t\u00e9matu), \u0159eknu pouze, \u017ee Telnet poskytuje vzd\u00e1len\u00fd p\u0159\u00edstup k p\u0159\u00edkazov\u00e9mu \u0159\u00e1dku za\u0159\u00edzen\u00ed. V z\u00e1sad\u011b t\u00edm jego funk\u010dnost kon\u010d\u00ed (o p\u0159\u00edstupu k serverov\u00e9mu portu se zat\u00edm nezmi\u0148uji, o tom pozd\u011bji). Tak\u017ee pro jeho realizaci pot\u0159ebujeme p\u0159ijmout \u0159et\u011bzec na klientovi, p\u0159edat ho na server, pokusit se p\u0159edat ho do p\u0159\u00edkazov\u00e9ho \u0159\u00e1dku, p\u0159e\u010d\u00edst odpov\u011b\u010f p\u0159\u00edkazov\u00e9ho \u0159\u00e1dku, pokud n\u011bjak\u00e1 existuje, vr\u00e1tit ji zp\u011bt na klienta a zobrazit ji na obrazovce, nebo v p\u0159\u00edpad\u011b chyby u\u017eivatelovi nazna\u010dit, \u017ee n\u011bco nen\u00ed v po\u0159\u00e1dku.<\/p>\n<p>Pro realizaci v\u00fd\u0161e uveden\u00e9ho pot\u0159ebujeme tedy 2 funk\u010dn\u00ed t\u0159\u00eddy a n\u011bjakou testovac\u00ed t\u0159\u00eddu, ze kter\u00e9 budeme spou\u0161t\u011bt server a skrze kterou bude fungovat klient.<br \/>\nV sou\u010dasn\u00e9 dob\u011b struktura aplikace zahrnuje:<\/p>\n<ul>\n<li>TelnetClient<\/li>\n<li>TelnetClientTester<\/li>\n<li>TelnetServer<\/li>\n<li>TelnetServerTester<\/li>\n<\/ul>\n<p>\nProbereme si ka\u017edou z nich:<\/p>\n<p><b>TelnetClient<\/b><\/p>\n<p>V\u0161e, co by tato t\u0159\u00edda m\u011bla um\u011bt, je pos\u00edlat p\u0159ijat\u00e9 p\u0159\u00edkazy a zobrazovat p\u0159ijat\u00e9 odpov\u011bdi. Krom\u011b toho by se m\u011bla um\u011bt p\u0159ipojit k libovoln\u00e9mu (o \u010dem\u017e jsem se zm\u00ednil v\u00fd\u0161e) portu vzd\u00e1len\u00e9ho za\u0159\u00edzen\u00ed a odpojit se od n\u011bj.<\/p>\n<p>K tomu byly implementov\u00e1ny n\u00e1sleduj\u00edc\u00ed funkce:<\/p>\n<p>Funkce, kter\u00e1 jako argument p\u0159ij\u00edm\u00e1 adresu socketu, otev\u00edr\u00e1 spojen\u00ed a spou\u0161t\u00ed vstupn\u00ed a v\u00fdstupn\u00ed vl\u00e1kna (prom\u011bnn\u00e9 vl\u00e1ken jsou deklarov\u00e1ny v\u00fd\u0161e, kompletn\u00ed zdrojov\u00e9 k\u00f3dy budou na konci \u010dl\u00e1nku).<\/p>\n<pre><code class=\"java\"> public void run(String ip, int port)\n    {\n        try {\n            Socket socket = new Socket(ip, port);\n            InputStream sin = socket.getInputStream();\n            OutputStream sout = socket.getOutputStream();\n            Scanner keyboard = new Scanner(System.in);\n            reader = new Thread(()-&gt;read(keyboard, sout));\n            writer = new Thread(()-&gt;write(sin));\n            reader.start();\n            writer.start();\n        }\n        catch (Exception e) {\n            System.out.println(e.getMessage());\n        }\n    }\n<\/code><\/pre>\n<p>\nP\u0159ejmenov\u00e1n\u00ed t\u00e9to funkce pro p\u0159ipojen\u00ed k v\u00fdchoz\u00edmu portu \u2013 pro telnet je to 23.<\/p>\n<pre><code class=\"java\">\n    public void run(String ip)\n    {\n        run(ip, 23);\n    }\n<\/code><\/pre>\n<p>\nFunkce \u010dte znaky z kl\u00e1vesnice a pos\u00edl\u00e1 je do v\u00fdstupn\u00edho soketu \u2013 co\u017e je netypick\u00e9, v \u0159\u00e1dkov\u00e9m, nikoli znakov\u00e9m re\u017eimu:<\/p>\n<pre><code class=\"java\">\n    private void read(Scanner keyboard, OutputStream sout)\n    {\n        try {\n            String input = new String();\n            while (true) {\n                input = keyboard.nextLine();\n                for (char i : (input + \" n\").toCharArray())\n                    sout.write(i);\n            }\n        }\n        catch (Exception e) {\n            System.out.println(e.getMessage());\n        }\n    }\n<\/code><\/pre>\n<p>\nFunkce p\u0159ij\u00edm\u00e1 data ze soketu a zobrazuje je na obrazovce.<\/p>\n<pre><code class=\"java\">\n    private void write(InputStream sin)\n    {\n        try {\n            int tmp;\n            while (true){\n                tmp = sin.read();\n                System.out.print((char)tmp);\n            }\n        }\n        catch (Exception e) {\n            System.out.println(e.getMessage());\n        }\n    }\n<\/code><\/pre>\n<p>\nFunkce zastavuje p\u0159\u00edjem a p\u0159enos dat.<\/p>\n<pre><code class=\"java\">\n    public void stop()\n    {\n        reader.stop();\n        writer.stop();\n    }\n}<\/code><\/pre>\n<p>\n<b>TelnetServer<\/b><\/p>\n<p>T\u0159\u00edda by m\u011bla m\u00edt funkce pro p\u0159\u00edjem p\u0159\u00edkazu ze soketu, jeho proveden\u00ed a odesl\u00e1n\u00ed odpov\u011bdi zp\u011bt na soket. Program \u00famysln\u011b neprov\u00e1d\u00ed kontrolu vstupn\u00edch dat, proto\u017ee za prv\u00e9, i v \"krabicov\u00e9m telnetu\" je mo\u017enost form\u00e1tov\u00e1n\u00ed disku serveru, a za druh\u00e9, ot\u00e1zka bezpe\u010dnosti je v tomto \u010dl\u00e1nku zcela opomenuta, a proto tu nen\u00ed ani slovo o \u0161ifrov\u00e1n\u00ed nebo SSL.<\/p>\n<p>Celkem jsou zde 2 funkce (jedna z nich je p\u0159et\u00ed\u017eena), a celkov\u011b to nen\u00ed p\u0159\u00edli\u0161 dobr\u00e1 praxe, nicm\u00e9n\u011b v r\u00e1mci t\u00e9to \u00falohy se mi zd\u00e1lo na m\u00edst\u011b nechat v\u0161e tak, jak to je.<\/p>\n<pre><code class=\"java\"> boolean isRunning = true;\n    public void run(int port)    {\n\n        (new Thread(()-&gt;{ try {\n            ServerSocket ss = new ServerSocket(port); \/\/ vytv\u00e1\u0159\u00edme serverov\u00fd socket a p\u0159i\u0159azujeme ho k uveden\u00e9mu portu\n            System.out.println(\"Port \" + port + \" \u010dek\u00e1 na p\u0159ipojen\u00ed\");\n\n            Socket socket = ss.accept();\n            System.out.println(\"P\u0159ipojeno\");\n            System.out.println();\n\n            \/\/ Bereme vstupn\u00ed a v\u00fdstupn\u00ed proudy socketu, co\u017e n\u00e1m nyn\u00ed umo\u017e\u0148uje p\u0159ij\u00edmat a pos\u00edlat data klientovi.\n            InputStream sin = socket.getInputStream();\n            OutputStream sout = socket.getOutputStream();\n\n            Map env = System.getenv();\n            String wayToTemp = env.get(\"TEMP\") + \"tmp.txt\";\n            for (int i : (\"Connectednnr\".toCharArray()))\n                sout.write(i);\n            sout.flush();\n\n            String buffer = new String();\n            while (isRunning) {\n\n                int intReader = 0;\n                while ((char) intReader != 'n') {\n                    intReader = sin.read();\n                    buffer += (char) intReader;\n                }\n\n\n                final String inputToSubThread = \"cmd \/c \" + buffer.substring(0, buffer.length() - 2) + \" 2&gt;&amp;1\";\n\n\n                new Thread(() -&gt; {\n                    try {\n\n                        Process p = Runtime.getRuntime().exec(inputToSubThread);\n                        InputStream out = p.getInputStream();\n                        Scanner fromProcess = new Scanner(out);\n                        try {\n\n                            while (fromProcess.hasNextLine()) {\n                                String temp = fromProcess.nextLine();\n                                System.out.println(temp);\n                                for (char i : temp.toCharArray())\n                                    sout.write(i);\n                                sout.write('n');\n                                sout.write('r');\n                            }\n                        }\n                        catch (Exception e) {\n                            String output = \"N\u011bco se pokazilo... K\u00f3d chyby: \" + e.getStackTrace();\n                            System.out.println(output);\n                            for (char i : output.toCharArray())\n                                sout.write(i);\n                            sout.write('n');\n                            sout.write('r');\n                        }\n\n                        p.getErrorStream().close();\n                        p.getOutputStream().close();\n                        p.getInputStream().close();\n                        sout.flush();\n\n                    }\n                    catch (Exception e) {\n                        System.out.println(\"Chyba: \" + e.getMessage());\n                    }\n                }).start();\n                System.out.println(buffer);\n                buffer = \"\";\n\n            }\n        }\n        catch(Exception x) {\n            System.out.println(x.getMessage());\n        }})).start();\n\n    }\n<\/code><\/pre>\n<p>\nProgram otev\u0159e serverov\u00fd port, \u010dte z n\u011bj data, dokud nenaraz\u00ed na symbol konce p\u0159\u00edkazu, p\u0159ed\u00e1 p\u0159\u00edkaz do nov\u00e9ho procesu a v\u00fdstup z procesu je p\u0159esm\u011brov\u00e1n do socketu. V\u0161echno je to jednoduch\u00e9 jako kala\u0161nikov.<\/p>\n<p>Pro tuto funkci existuje odpov\u00eddaj\u00edc\u00ed p\u0159et\u00ed\u017een\u00ed s v\u00fdchoz\u00edm portem:<\/p>\n<pre><code class=\"java\"> public void run()\n    {\n        run(23);\n    }<\/code><\/pre>\n<p>\nA funkce, kter\u00e1 zastavuje server, je tak\u00e9 velmi trivi\u00e1ln\u00ed, p\u0159eru\u0161\u00ed nekone\u010dn\u00fd cyklus a naru\u0161\u00ed jeho podm\u00ednku.<\/p>\n<pre><code class=\"java\">    public void stop()\n    {\n        System.out.println(\"Server was stopped\");\n        this.isRunning = false;\n    }<\/code><\/pre>\n<p>\nP\u0159\u00edklady testovac\u00edch t\u0159\u00edd zde nebudu uv\u00e1d\u011bt, jsou n\u00ed\u017ee \u2014 v\u0161e, co d\u011blaj\u00ed, je zkontrolovat funk\u010dnost ve\u0159ejn\u00fdch metod. V\u0161e je na Gitu.<\/p>\n<p>Shrnuto, b\u011bhem p\u00e1r ve\u010der\u016f m\u016f\u017eete pochopit principy fungov\u00e1n\u00ed z\u00e1kladn\u00edch konzolov\u00fdch utilit. Nyn\u00ed, kdy\u017e se p\u0159ipoj\u00edme k vzd\u00e1len\u00e9mu po\u010d\u00edta\u010di, ch\u00e1peme, co se d\u011bje \u2014 magie zmizela)<\/p>\n<p>Tak\u017ee, odkazy:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Toxa-p07a1330\/Temviewer\">V\u0161echny zdrojov\u00e9 soubory byly, jsou a budou zde<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.extrahop.com\/resources\/protocols\/telnet\/\">O Telnetu<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.lifewire.com\/what-does-telnet-do-2483642\">Dal\u0161\u00ed informace o Telnetu<\/a><\/noindex><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/460569\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, \u043a\u0430\u043a \u0442\u043e Telnet, TFTP, et cetera, et cetera \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 Jav\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u044f \u043d\u0435 \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0443 \u2014 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u043e\u0434\u0438\u043d \u0433\u043e\u0434, \u043d\u043e, \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 \u043d\u0438\u0445 \u0437\u043d\u0430\u044e\u0442 \u043d\u0435 \u0432\u0441\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u0431 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36378","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, \u043a\u0430\u043a \u0442\u043e Telnet, TFTP, et cetera, et cetera \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 Jav\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, part 01 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, \u043a\u0430\u043a \u0442\u043e Telnet, TFTP, et cetera, et cetera \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 Jav\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:11:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:11:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Psan\u00ed softwaru s funk\u010dnost\u00ed klient-server utilit Windows, \u010d\u00e1st 01 | ProHoster","description":"V\u00edt\u00e1m v\u00e1s. Dnes bych cht\u011bl rozebrat proces psan\u00ed klient-server aplikac\u00ed, kter\u00e9 pln\u00ed funkce standardn\u00edch utilit Windows, jako jsou Telnet, TFTP, atd., atd. na \u010dist\u00e9 Jav\u011b.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, part 01 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 Windows, \u043a\u0430\u043a \u0442\u043e Telnet, TFTP, et cetera, et cetera \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 Jav\u0430.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:11:20+00:00","article:modified_time":"2019-10-31T19:11:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36378","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 03:04:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:46:25","updated":"2026-01-22 03:04:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/36378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=36378"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/36378\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=36378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=36378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=36378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}