TCP/IP-Schnittstelle mit BSD-Sockets

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

TCP/IP-Schnittstelle mit BSD-Sockets

In interaktiven Systemen kommt häufig die OSC-Schnittstelle zum Einsatz. Neben diesem genormten Protokoll können natürlich auch eigene Schnittstellen/Protokolle implementiert werden. Ein Beispiel hierfür ist die nachfolgend beschriebene TCP/IP-Schnittstelle mit BSD-Sockets, welche im Rahmen des Projekts Gestenerkennung mit Neuronalen Netzen implementiert wurde. Hier wurde eine Server-.Anwendung realisiert, welche aus einem Eyesweb-Patch mit Daten versorgt wird.


Erstellen einer Server-Anwendung


  • Einleitung

In diesem Artikel wird die Implementierung einer Client/Server Schnittstelle mit Sockets beschrieben. Es werden fundierende Kenntnisse in der Programmiersprache C vorausgesetzt.


Der erste Schritt einer Kommunikationsverbindung ist immer einen Socket vom Betriebssystem anzufordern. Das erzeugen eines Sockets (Kommunikationsendpunkt) kann man sich wie installieren einer Stromsteckdose vorstellen.

#include <sys/socket.h>

int socket(int domain, int type, int protocol)

Danach muss zunächst die Portnummer der Server-Anwendung festgelegt werden. Unter welcher IP-Adresse und Portnummer, der Server denn nun auf Anfragen der Clients wartet, muss mit der Funktion bind() festgelegt werden. Somit wird einem Socket praktisch eine Adresse zugewiesen.

#include <sys/socket.h>

int bind(int s, const struct sockaddr name, int namelen)

Im nächsten Schritt muss eine Warteschlange einrichtet werden, welche auf eingehende Verbindung eines Clients wartet. Eine solche Warteschlange wird mit der Funktion listen() eingerichtet.

#include <sys/socket.h>

int listen( int s, int backlog)

Sobald nun ein Client (Eyesweb) Verbindung mit dem Server aufnehmen will, holt die Funktion accept() die nächste Verbindung aus der Warteschlange.

#include <sys/socket.h>

int accept( int s, struct sockaddr * addr, socklen_t addrlen)

Um Daten von einem Stream-Socket zu empfangen wird die Funktion recv() verwendet. Die Syntax lautet:

#include <sys/types.h>
#include <sys/socket.h>


ssize_t recv( int socketfd, void * data, size_t data_len, unsigned int flag)

Nachdem die Übertragung abgeschlossen ist, wird der der Socket-Deskriptor wieder freigegegben bzw. geschlossen. Dazu wird die Funktion close() verwendet.

#include <unistd.h>

int close( int s)
printf"\nHallo Wiki";