<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Sockets</id>
	<title>Sockets - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Sockets"/>
	<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Sockets&amp;action=history"/>
	<updated>2026-05-15T09:15:09Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in dev.kaibel.net</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Sockets&amp;diff=75&amp;oldid=prev</id>
		<title>PhilKa: /* Siehe auch */</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Sockets&amp;diff=75&amp;oldid=prev"/>
		<updated>2025-10-30T10:30:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Siehe auch&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;http://dev.kaibel.net/index.php?title=Sockets&amp;amp;diff=75&amp;amp;oldid=46&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Sockets&amp;diff=46&amp;oldid=prev</id>
		<title>PhilKa: Die Seite wurde neu angelegt: „= Socket-Programmierung in C =  Die &#039;&#039;&#039;Socket-Programmierung&#039;&#039;&#039; in C ermöglicht die Kommunikation zwischen Prozessen über ein Netzwerk. Sie bildet die Grundlage vieler Internetanwendungen wie Webserver, Chatprogramme oder Dateitransfers.  Obwohl C keine &quot;Socket-Klasse&quot; im objektorientierten Sinne besitzt, wird der Begriff oft verwendet, um die Funktionalität rund um die &#039;&#039;Socket-API&#039;&#039; zu beschreiben, die über Header-Dateien wie &lt;code&gt;&amp;lt;sys/socket.h&amp;…“</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Sockets&amp;diff=46&amp;oldid=prev"/>
		<updated>2025-10-18T16:22:45Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Socket-Programmierung in C =  Die &amp;#039;&amp;#039;&amp;#039;Socket-Programmierung&amp;#039;&amp;#039;&amp;#039; in C ermöglicht die Kommunikation zwischen Prozessen über ein Netzwerk. Sie bildet die Grundlage vieler Internetanwendungen wie Webserver, Chatprogramme oder Dateitransfers.  Obwohl C keine &amp;quot;Socket-Klasse&amp;quot; im objektorientierten Sinne besitzt, wird der Begriff oft verwendet, um die Funktionalität rund um die &amp;#039;&amp;#039;Socket-API&amp;#039;&amp;#039; zu beschreiben, die über Header-Dateien wie &amp;lt;code&amp;gt;&amp;lt;sys/socket.h&amp;amp;…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Socket-Programmierung in C =&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Socket-Programmierung&amp;#039;&amp;#039;&amp;#039; in C ermöglicht die Kommunikation zwischen Prozessen über ein Netzwerk. Sie bildet die Grundlage vieler Internetanwendungen wie Webserver, Chatprogramme oder Dateitransfers.&lt;br /&gt;
&lt;br /&gt;
Obwohl C keine &amp;quot;Socket-Klasse&amp;quot; im objektorientierten Sinne besitzt, wird der Begriff oft verwendet, um die Funktionalität rund um die &amp;#039;&amp;#039;Socket-API&amp;#039;&amp;#039; zu beschreiben, die über Header-Dateien wie &amp;lt;code&amp;gt;&amp;amp;lt;sys/socket.h&amp;amp;gt;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;amp;lt;netinet/in.h&amp;amp;gt;&amp;lt;/code&amp;gt; bereitgestellt wird.&lt;br /&gt;
&lt;br /&gt;
== Grundlagen ==&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Socket&amp;#039;&amp;#039;&amp;#039; ist eine Schnittstelle (Endpunkt) für die Kommunikation zwischen zwei Rechnern über ein Netzwerk.  &lt;br /&gt;
In C werden Sockets über Dateideskriptoren (int-Werte) dargestellt, ähnlich wie Dateien.&lt;br /&gt;
&lt;br /&gt;
Typische Kommunikation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client &amp;lt;----&amp;gt; Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Wichtige Funktionen der Socket-API ==&lt;br /&gt;
&lt;br /&gt;
=== 1. socket() ===&lt;br /&gt;
Erzeugt einen neuen Socket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int socket(int domain, int type, int protocol);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;domain&amp;#039;&amp;#039;&amp;#039; – Kommunikationsdomäne, z. B.:&lt;br /&gt;
  * &amp;lt;code&amp;gt;AF_INET&amp;lt;/code&amp;gt; für IPv4&lt;br /&gt;
  * &amp;lt;code&amp;gt;AF_INET6&amp;lt;/code&amp;gt; für IPv6  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;type&amp;#039;&amp;#039;&amp;#039; – Typ des Sockets:&lt;br /&gt;
  * &amp;lt;code&amp;gt;SOCK_STREAM&amp;lt;/code&amp;gt; (TCP)&lt;br /&gt;
  * &amp;lt;code&amp;gt;SOCK_DGRAM&amp;lt;/code&amp;gt; (UDP)  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;protocol&amp;#039;&amp;#039;&amp;#039; – Meist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (Standardprotokoll für Typ)&lt;br /&gt;
&lt;br /&gt;
**Beispiel:**&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 2. bind() ===&lt;br /&gt;
Verknüpft den Socket mit einer lokalen Adresse (z. B. Port).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Beispiel (Server):**&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct sockaddr_in serv_addr;&lt;br /&gt;
serv_addr.sin_family = AF_INET;&lt;br /&gt;
serv_addr.sin_addr.s_addr = INADDR_ANY;&lt;br /&gt;
serv_addr.sin_port = htons(8080);&lt;br /&gt;
&lt;br /&gt;
bind(sockfd, (struct sockaddr*)&amp;amp;serv_addr, sizeof(serv_addr));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 3. listen() ===&lt;br /&gt;
Versetzt den Socket in den &amp;quot;Lauschmodus&amp;quot; für eingehende Verbindungen (nur TCP).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int listen(int sockfd, int backlog);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 4. accept() ===&lt;br /&gt;
Nimmt eine eingehende Verbindung an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 5. connect() ===&lt;br /&gt;
Verbindet einen Client-Socket mit einem Server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6. send() / recv() ===&lt;br /&gt;
Dient dem Senden und Empfangen von Daten über TCP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ssize_t send(int sockfd, const void* buf, size_t len, int flags);&lt;br /&gt;
ssize_t recv(int sockfd, void* buf, size_t len, int flags);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 7. close() ===&lt;br /&gt;
Schließt den Socket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
close(sockfd);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Einfacher TCP-Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PORT 8080&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int server_fd, new_socket;&lt;br /&gt;
    struct sockaddr_in address;&lt;br /&gt;
    int addrlen = sizeof(address);&lt;br /&gt;
    char buffer[1024] = {0};&lt;br /&gt;
    const char* message = &amp;quot;Hallo vom Server!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // Socket erstellen&lt;br /&gt;
    server_fd = socket(AF_INET, SOCK_STREAM, 0);&lt;br /&gt;
    if (server_fd == -1) {&lt;br /&gt;
        perror(&amp;quot;socket&amp;quot;);&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Adresse zuweisen&lt;br /&gt;
    address.sin_family = AF_INET;&lt;br /&gt;
    address.sin_addr.s_addr = INADDR_ANY;&lt;br /&gt;
    address.sin_port = htons(PORT);&lt;br /&gt;
    bind(server_fd, (struct sockaddr*)&amp;amp;address, sizeof(address));&lt;br /&gt;
&lt;br /&gt;
    // Auf Verbindungen warten&lt;br /&gt;
    listen(server_fd, 3);&lt;br /&gt;
    printf(&amp;quot;Server wartet auf Verbindung...\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Verbindung annehmen&lt;br /&gt;
    new_socket = accept(server_fd, (struct sockaddr*)&amp;amp;address, (socklen_t*)&amp;amp;addrlen);&lt;br /&gt;
    printf(&amp;quot;Client verbunden!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Daten empfangen und antworten&lt;br /&gt;
    read(new_socket, buffer, sizeof(buffer));&lt;br /&gt;
    printf(&amp;quot;Client sagt: %s\n&amp;quot;, buffer);&lt;br /&gt;
    send(new_socket, message, strlen(message), 0);&lt;br /&gt;
&lt;br /&gt;
    close(new_socket);&lt;br /&gt;
    close(server_fd);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Einfacher TCP-Client ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PORT 8080&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    int sock = 0;&lt;br /&gt;
    struct sockaddr_in serv_addr;&lt;br /&gt;
    char buffer[1024] = {0};&lt;br /&gt;
&lt;br /&gt;
    // Socket erstellen&lt;br /&gt;
    sock = socket(AF_INET, SOCK_STREAM, 0);&lt;br /&gt;
    if (sock == -1) {&lt;br /&gt;
        perror(&amp;quot;socket&amp;quot;);&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    serv_addr.sin_family = AF_INET;&lt;br /&gt;
    serv_addr.sin_port = htons(PORT);&lt;br /&gt;
&lt;br /&gt;
    // IP-Adresse des Servers konvertieren&lt;br /&gt;
    inet_pton(AF_INET, &amp;quot;127.0.0.1&amp;quot;, &amp;amp;serv_addr.sin_addr);&lt;br /&gt;
&lt;br /&gt;
    // Verbindung herstellen&lt;br /&gt;
    connect(sock, (struct sockaddr*)&amp;amp;serv_addr, sizeof(serv_addr));&lt;br /&gt;
&lt;br /&gt;
    // Nachricht senden&lt;br /&gt;
    send(sock, &amp;quot;Hallo Server!&amp;quot;, strlen(&amp;quot;Hallo Server!&amp;quot;), 0);&lt;br /&gt;
&lt;br /&gt;
    // Antwort empfangen&lt;br /&gt;
    read(sock, buffer, sizeof(buffer));&lt;br /&gt;
    printf(&amp;quot;Server antwortet: %s\n&amp;quot;, buffer);&lt;br /&gt;
&lt;br /&gt;
    close(sock);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Ablauf einer TCP-Verbindung ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Server: socket() → bind() → listen() → accept()&lt;br /&gt;
Client: socket() → connect()&lt;br /&gt;
Beide:  send()/recv()&lt;br /&gt;
Beide:  close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[getaddrinfo (C-Funktion)]]&lt;br /&gt;
* [[bind (C-Funktion)]]&lt;br /&gt;
* [[connect (C-Funktion)]]&lt;br /&gt;
* [[send (C-Funktion)]]&lt;br /&gt;
* [[recv (C-Funktion)]]&lt;br /&gt;
* [[TCP/IP-Modell]]&lt;br /&gt;
* [[UDP (Protokoll)]]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
* Stevens, W. Richard: &amp;#039;&amp;#039;UNIX Network Programming&amp;#039;&amp;#039;, Vol. 1, Prentice Hall.  &lt;br /&gt;
* ISO/IEC 9899:2018 – Programming Language C  &lt;br /&gt;
* GNU/Linux man pages: &amp;lt;code&amp;gt;man 2 socket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;man 2 bind&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;man 2 connect&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
</feed>