{"id":476,"date":"2024-07-01T22:21:12","date_gmt":"2024-07-01T21:21:12","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=476"},"modified":"2024-07-04T22:31:00","modified_gmt":"2024-07-04T21:31:00","slug":"tcp-sockets-in-java-die-basics","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=476","title":{"rendered":"TCP-Sockets in Java &#8211; die Basics"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einleitung<\/h2>\n\n\n\n<p>TCP-Sockets sind ein grundlegendes Konzept in der Netzwerktechnik und spielen eine wesentliche Rolle bei der Kommunikation zwischen Computern \u00fcber das Internet oder lokale Netzwerke. In Java sind Sockets Klassen in der <code>java.net<\/code>-Bibliothek, die es Entwicklern erm\u00f6glichen, Netzwerkkommunikation in ihren Anwendungen zu implementieren. Dieser Artikel erkl\u00e4rt, wie man TCP-Sockets in Java verwendet, indem sowohl eine Server- als auch eine Client-Anwendung entwickelt wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlagen der TCP-Sockets<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist ein TCP-Socket?<\/h3>\n\n\n\n<p>Ein TCP-Socket ist eine Endpunkt-Instanz, die eine bidirektionale Kommunikationsverbindung zwischen zwei Programmen \u00fcber ein Netzwerk erm\u00f6glicht. TCP (Transmission Control Protocol) sorgt daf\u00fcr, dass Daten zuverl\u00e4ssig, in der richtigen Reihenfolge und ohne Fehler \u00fcbertragen werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wichtige Begriffe<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server<\/strong>: Das Programm, das auf Verbindungen von Clients wartet.<\/li>\n\n\n\n<li><strong>Client<\/strong>: Das Programm, das eine Verbindung zu einem Server initiiert.<\/li>\n\n\n\n<li><strong>Port<\/strong>: Eine Nummer, die verwendet wird, um verschiedene Anwendungen auf demselben Netzwerk-Host zu unterscheiden.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Entwicklung einer Server-Anwendung<\/h2>\n\n\n\n<p>Der Server ist der zentrale Teil der Kommunikation, der auf Verbindungsanfragen von Clients wartet und diese verarbeitet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 1: Import der notwendigen Bibliotheken<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.*;\n<span class=\"hljs-keyword\">import<\/span> java.net.*;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Schritt 2: Erstellen des Server-Sockets<\/h3>\n\n\n\n<p>Ein Server-Socket wird erstellt, indem ein Objekt der Klasse <code>ServerSocket<\/code> instanziiert wird, das an einem bestimmten Port lauscht.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TCPServer<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-keyword\">try<\/span> {\n            ServerSocket serverSocket = <span class=\"hljs-keyword\">new<\/span> ServerSocket(<span class=\"hljs-number\">12345<\/span>);\n            System.out.println(<span class=\"hljs-string\">\"Server gestartet und wartet auf Verbindungen...\"<\/span>);\n\n            <span class=\"hljs-comment\">\/\/ Der Server wartet in einer Endlosschleife auf Verbindungen<\/span>\n            <span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {\n                Socket clientSocket = serverSocket.accept();\n                System.out.println(<span class=\"hljs-string\">\"Verbindung zu Client hergestellt: \"<\/span> + clientSocket.getInetAddress());\n\n                <span class=\"hljs-comment\">\/\/ Verarbeitung der Client-Anfragen in einem separaten Thread<\/span>\n                <span class=\"hljs-keyword\">new<\/span> ClientHandler(clientSocket).start();\n            }\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Schritt 3: Verarbeitung der Client-Anfragen<\/h3>\n\n\n\n<p>Jede Client-Anfrage wird in einem separaten Thread verarbeitet, um gleichzeitige Verbindungen zu unterst\u00fctzen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ClientHandler<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thread<\/span> <\/span>{\n    private Socket clientSocket;\n\n    public ClientHandler(Socket socket) {\n        <span class=\"hljs-keyword\">this<\/span>.clientSocket = socket;\n    }\n\n    public <span class=\"hljs-keyword\">void<\/span> run() {\n        <span class=\"hljs-keyword\">try<\/span> {\n            BufferedReader <span class=\"hljs-keyword\">in<\/span> = <span class=\"hljs-keyword\">new<\/span> BufferedReader(<span class=\"hljs-keyword\">new<\/span> InputStreamReader(clientSocket.getInputStream()));\n            PrintWriter out = <span class=\"hljs-keyword\">new<\/span> PrintWriter(clientSocket.getOutputStream(), <span class=\"hljs-literal\">true<\/span>);\n\n            <span class=\"hljs-built_in\">String<\/span> clientMessage;\n            <span class=\"hljs-keyword\">while<\/span> ((clientMessage = <span class=\"hljs-keyword\">in<\/span>.readLine()) != <span class=\"hljs-literal\">null<\/span>) {\n                System.out.println(<span class=\"hljs-string\">\"Nachricht vom Client: \"<\/span> + clientMessage);\n                out.println(<span class=\"hljs-string\">\"Echo: \"<\/span> + clientMessage);  <span class=\"hljs-comment\">\/\/ Echo-Antwort an den Client senden<\/span>\n            }\n\n            <span class=\"hljs-keyword\">in<\/span>.close();\n            out.close();\n            clientSocket.close();\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Entwicklung einer Client-Anwendung<\/h2>\n\n\n\n<p>Der Client initiiert die Verbindung zum Server und kommuniziert mit diesem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 1: Import der notwendigen Bibliotheken<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.*;\n<span class=\"hljs-keyword\">import<\/span> java.net.*;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Schritt 2: Erstellen des Client-Sockets und Verbindung zum Server<\/h3>\n\n\n\n<p>Ein Client-Socket wird erstellt und mit dem Server verbunden.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TCPClient<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> serverAddress = <span class=\"hljs-string\">\"localhost\"<\/span>;\n        int port = <span class=\"hljs-number\">12345<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> {\n            Socket socket = <span class=\"hljs-keyword\">new<\/span> Socket(serverAddress, port);\n            System.out.println(<span class=\"hljs-string\">\"Verbunden mit dem Server.\"<\/span>);\n\n            BufferedReader <span class=\"hljs-keyword\">in<\/span> = <span class=\"hljs-keyword\">new<\/span> BufferedReader(<span class=\"hljs-keyword\">new<\/span> InputStreamReader(socket.getInputStream()));\n            PrintWriter out = <span class=\"hljs-keyword\">new<\/span> PrintWriter(socket.getOutputStream(), <span class=\"hljs-literal\">true<\/span>);\n            BufferedReader stdIn = <span class=\"hljs-keyword\">new<\/span> BufferedReader(<span class=\"hljs-keyword\">new<\/span> InputStreamReader(System.in));\n\n            <span class=\"hljs-built_in\">String<\/span> userInput;\n            <span class=\"hljs-keyword\">while<\/span> ((userInput = stdIn.readLine()) != <span class=\"hljs-literal\">null<\/span>) {\n                out.println(userInput);\n                System.out.println(<span class=\"hljs-string\">\"Server antwortet: \"<\/span> + <span class=\"hljs-keyword\">in<\/span>.readLine());\n            }\n\n            <span class=\"hljs-keyword\">in<\/span>.close();\n            out.close();\n            socket.close();\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Beispielhafte Kommunikation<\/h3>\n\n\n\n<p>Angenommen, der Server l\u00e4uft und wartet auf Verbindungen. Wenn der Client gestartet wird und eine Nachricht wie \u201eHallo, Server!\u201c eingibt, sieht der Ablauf wie folgt aus:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Client sendet die Nachricht \u201eHallo, Server!\u201c an den Server.<\/li>\n\n\n\n<li>Der Server empf\u00e4ngt die Nachricht und sendet eine Echo-Antwort \u201eEcho: Hallo, Server!\u201c zur\u00fcck.<\/li>\n\n\n\n<li>Der Client empf\u00e4ngt die Antwort und zeigt sie an.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>In diesem Artikel haben wir die Grundlagen von TCP-Sockets in Java behandelt. Wir haben gezeigt, wie man eine einfache Server- und Client-Anwendung erstellt, die \u00fcber TCP-Sockets kommunizieren. Der Server wartet auf Verbindungen und verarbeitet diese in separaten Threads, w\u00e4hrend der Client eine Verbindung initiiert und Nachrichten sendet und empf\u00e4ngt. Dies bildet die Basis f\u00fcr komplexere Netzwerkkommunikationsanwendungen in Java.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung TCP-Sockets sind ein grundlegendes Konzept in der Netzwerktechnik und spielen eine wesentliche Rolle bei der Kommunikation zwischen Computern \u00fcber das Internet oder lokale Netzwerke. In Java sind Sockets Klassen in der java.net-Bibliothek, die es Entwicklern erm\u00f6glichen, Netzwerkkommunikation in ihren Anwendungen zu implementieren. Dieser Artikel erkl\u00e4rt, wie man TCP-Sockets in Java verwendet, indem sowohl eine [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-476","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=476"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/476\/revisions"}],"predecessor-version":[{"id":477,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/476\/revisions\/477"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}