{"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\/hu\/blog\/administrirovanie\/napisanie-programmnogo-obespecheniya-s-funktsionalom-klient-servernyh-utilit-windows-part-01","title":{"rendered":"Windows kliens-szerver funkci\u00f3kkal rendelkez\u0151 szoftver \u00edr\u00e1sa, 01. r\u00e9sz","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00dcdv\u00f6zl\u00f6m.<\/p>\n<p>Ma a kliens-szerver alkalmaz\u00e1sok \u00edr\u00e1s\u00e1nak folyamat\u00e1t szeretn\u00e9m megvizsg\u00e1lni, amelyek a Windows standard seg\u00e9dprogramjainak, mint p\u00e9ld\u00e1ul a Telnet, TFTP stb. stb. funkci\u00f3it l\u00e1tj\u00e1k el, tiszta Jav\u00e1val. Nyilv\u00e1nval\u00f3, hogy semmi \u00fajat nem hozok be \u2014 ezek a seg\u00e9dprogramok m\u00e1r \u00e9vek \u00f3ta sikeresen m\u0171k\u00f6dnek, de azt hiszem, nem mindenki ismeri, mi t\u00f6rt\u00e9nik m\u00f6g\u00f6tt\u00fck.<\/p>\n<p>Err\u0151l fog sz\u00f3lni a cikk alj\u00e1n. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEbben a cikkben, hogy ne legyen t\u00fal hossz\u00fa, az \u00e1ltal\u00e1nos inform\u00e1ci\u00f3k mellett csak a Telnet szerverr\u0151l \u00edrok, de jelenleg van anyag m\u00e1s seg\u00e9dprogramokr\u00f3l is \u2014 ezek a ciklus k\u00e9s\u0151bbi r\u00e9szeiben lesznek.<\/p>\n<p>Mindenekel\u0151tt tiszt\u00e1znunk kell, mi is az a Telnet, mire val\u00f3, \u00e9s hogyan m\u0171k\u00f6dik. Nem fogom sz\u00f3 szerint id\u00e9zni a forr\u00e1sokat (ha sz\u00fcks\u00e9ges \u2014 a cikk v\u00e9g\u00e9n csatolok hivatkoz\u00e1st a t\u00e9m\u00e1hoz), csak annyit mondok, hogy a Telnet t\u00e1voli hozz\u00e1f\u00e9r\u00e9st biztos\u00edt az eszk\u00f6z parancssor\u00e1hoz. Nagyj\u00e1b\u00f3l itt v\u00e9get is \u00e9r a funkci\u00f3ja (a szerver portj\u00e1nak el\u00e9r\u00e9s\u00e9r\u0151l sz\u00e1nd\u00e9kosan hallgattam, err\u0151l k\u00e9s\u0151bb). Teh\u00e1t, a megval\u00f3s\u00edt\u00e1s\u00e1hoz sz\u00fcks\u00e9g\u00fcnk van egy sorra a kliens oldalon, amit \u00e1t kell adni a szervernek, meg kell pr\u00f3b\u00e1lnunk v\u00e9grehajtani a parancssorban, olvasni a parancssorb\u00f3l az esetleges v\u00e1laszt, azt vissza kell k\u00fcldeni a kliensnek, \u00e9s ki kell \u00edrni a k\u00e9perny\u0151re, vagy ha hiba l\u00e9p fel, jelezni a felhaszn\u00e1l\u00f3nak, hogy valami nem ok\u00e9.<\/p>\n<p>A fentiek implement\u00e1l\u00e1s\u00e1hoz sz\u00fcks\u00e9g van 2 m\u0171k\u00f6d\u0151 oszt\u00e1lyra \u00e9s egy teszt oszt\u00e1lyra, ahonnan elind\u00edtjuk a szervert, \u00e9s amivel a kliens m\u0171k\u00f6dni fog.<br \/>\nTeh\u00e1t jelenleg az alkalmaz\u00e1s strukt\u00far\u00e1ja a k\u00f6vetkez\u0151ket tartalmazza:<\/p>\n<ul>\n<li>TelnetClient<\/li>\n<li>TelnetClientTester<\/li>\n<li>TelnetServer<\/li>\n<li>TelnetServerTester<\/li>\n<\/ul>\n<p>\nN\u00e9zz\u00fck \u00e1t mindegyiket:<\/p>\n<p><b>TelnetClient<\/b><\/p>\n<p>Mindannyiunknak, amit ez az oszt\u00e1ly csin\u00e1lnia kell \u2014 k\u00fcldeni a kapott parancsokat \u00e9s megjelen\u00edteni a kapott v\u00e1laszokat. Ezen k\u00edv\u00fcl k\u00e9pesnek kell lennie kapcsol\u00f3dni b\u00e1rmelyik (amit fent eml\u00edtettem) t\u00e1voli eszk\u00f6z portj\u00e1hoz, \u00e9s lev\u00e1lni r\u00f3la.<\/p>\n<p>Ehhez a k\u00f6vetkez\u0151 funkci\u00f3k lettek implement\u00e1lva:<\/p>\n<p>Egy f\u00fcggv\u00e9ny, amely socket c\u00edmet v\u00e1r param\u00e9ter\u00fcl, megnyitja a kapcsolatot \u00e9s elind\u00edtja a bemeneti \u00e9s kimeneti sz\u00e1lakat (a sz\u00e1l v\u00e1ltoz\u00f3i fent lettek deklar\u00e1lva, a teljes forr\u00e1sk\u00f3d a cikk v\u00e9g\u00e9n tal\u00e1lhat\u00f3).<\/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>\nUgyanennek a funkci\u00f3nak a t\u00falterhel\u00e9se, amely az alap\u00e9rtelmezett porthoz csatlakozik - a telnet eset\u00e9ben ez a 23<\/p>\n<pre><code class=\"java\">\n    public void run(String ip)\n    {\n        run(ip, 23);\n    }\n<\/code><\/pre>\n<p>\nA funkci\u00f3 a billenty\u0171zetr\u0151l olvas karaktereket, \u00e9s azokat a kimeneti socketre k\u00fcldi \u2013 jellemz\u0151en sor- \u00e9s nem karakterm\u00f3dban:<\/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>\nA funkci\u00f3 az adatokat a socketb\u0151l veszi \u00e9s ki\u00edrja a k\u00e9perny\u0151re<\/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>\nA funkci\u00f3 le\u00e1ll\u00edtja az adatok fogad\u00e1s\u00e1t \u00e9s k\u00fcld\u00e9s\u00e9t<\/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>Ennek az oszt\u00e1lynak rendelkeznie kell azzal a funkci\u00f3val, hogy parancsot fogad a socketb\u0151l, v\u00e9grehajtja azt, \u00e9s a parancs v\u00e1lasz\u00e1t visszak\u00fcldi a socketre. A programban sz\u00e1nd\u00e9kosan nincs bemeneti adatellen\u0151rz\u00e9s, mert egyr\u00e9szt a \"do-boxtelnetben\" is van lehet\u0151s\u00e9g a szerver lemez\u00e9nek form\u00e1z\u00e1s\u00e1ra, m\u00e1sr\u00e9szt a biztons\u00e1gi k\u00e9rd\u00e9s ebben a cikkben alapvet\u0151en elker\u00fcl\u00e9sre ker\u00fclt, \u00edgy itt egy sz\u00f3 sem esik sem titkos\u00edt\u00e1sr\u00f3l, sem SSL-r\u0151l.<\/p>\n<p>Itt mind\u00f6ssze 2 funkci\u00f3 van (az egyik t\u00falterhelt), \u00e9s ez \u00f6sszess\u00e9g\u00e9ben nem egy t\u00fal j\u00f3 gyakorlat, azonban a feladat keretein bel\u00fcl megfelel\u0151nek tartottam mindent \u00fagy hagyni, ahogy van.<\/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); \/\/ szerver socket l\u00e9trehoz\u00e1sa \u00e9s a megadott porthoz val\u00f3 csatol\u00e1sa\n            System.out.println(\"Port \"+port+\" connections-re v\u00e1r\");\n\n            Socket socket = ss.accept();\n            System.out.println(\"Kapcsol\u00f3dva\");\n            System.out.println();\n\n            \/\/ Az socket bemeneti \u00e9s kimeneti folyamait vessz\u00fck, most m\u00e1r adatokat k\u00fcldhet\u00fcnk \u00e9s kaphatunk az \u00fcgyf\u00e9lt\u0151l.\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 = \"Valami elromlott... Hiba k\u00f3d: \"+ 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(\"Hiba: \" + 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>\nA program megnyit egy szerver portot, olvas adatokat t\u0151le, am\u00edg a parancs v\u00e9g\u00e9t jelz\u0151 karaktert nem tal\u00e1lja, a parancsot egy \u00faj folyamatba k\u00fcldi, \u00e9s a folyamat kimenete \u00e1tir\u00e1ny\u00edt\u00e1sra ker\u00fcl a socket-re. Mindez olyan egyszer\u0171, mint egy Kalasnyikov g\u00e9pkarab\u00e9ly.<\/p>\n<p>Ez\u00e9rt ennek a funkci\u00f3nak van egy el\u0151t\u00f6lt\u00e9se az alap\u00e9rtelmezett porttal:<\/p>\n<pre><code class=\"java\"> public void run()\n    {\n        run(23);\n    }<\/code><\/pre>\n<p>\n\u00c9s term\u00e9szetesen a szervert le\u00e1ll\u00edt\u00f3 funkci\u00f3 is nagyon egyszer\u0171, megszak\u00edtja a v\u00e9gtelen ciklust, megszegve annak felt\u00e9tel\u00e9t.<\/p>\n<pre><code class=\"java\">    public void stop()\n    {\n        System.out.println(\"A szerver le\u00e1llt\");\n        this.isRunning = false;\n    }<\/code><\/pre>\n<p>\nNem hozok ide tesztoszt\u00e1lyokat, azok lent tal\u00e1lhat\u00f3k \u2014 mind\u00f6ssze annyit tesznek, hogy ellen\u0151rzik a nyilv\u00e1nos met\u00f3dusok m\u0171k\u00f6d\u00e9s\u00e9t. Minden ott van a github-on.<\/p>\n<p>\u00d6sszefoglalva, n\u00e9h\u00e1ny este alatt meg\u00e9rthetik a f\u0151 konzolos seg\u00e9dprogramok m\u0171k\u00f6d\u00e9si elveit. Most, hogy telnetelek egy t\u00e1voli sz\u00e1m\u00edt\u00f3g\u00e9pre, m\u00e1r \u00e9rtj\u00fck, mi t\u00f6rt\u00e9nik \u2014 a var\u00e1zslat elt\u0171nt)<\/p>\n<p>Teh\u00e1t, itt vannak a linkek:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Toxa-p07a1330\/Temviewer\">Minden forr\u00e1s itt volt, van \u00e9s lesz<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.extrahop.com\/resources\/protocols\/telnet\/\">A Telnetr\u0151l<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.lifewire.com\/what-does-telnet-do-2483642\">Tov\u00e1bbi Telnet inform\u00e1ci\u00f3k<\/a><\/noindex><br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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\udd47A kliens-szerver Windows seg\u00e9dprogramokkal rendelkez\u0151 szoftver fejleszt\u00e9se, 01. r\u00e9sz | ProHoster","description":"\u00dcdv\u00f6zl\u00f6m. Ma szeretn\u00e9m \u00e1ttekinteni a kliens-szerver alkalmaz\u00e1sok \u00edr\u00e1s\u00e1nak folyamat\u00e1t, amelyek a Windows szabv\u00e1nyos seg\u00e9dprogramjainak funkci\u00f3it l\u00e1tj\u00e1k el, mint a Telnet, TFTP stb., stb., tiszta Jav\u00e1val.","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/36378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36378"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36378\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}