CyberArmy Academy | CyberArmy Services & Support | Open Source Institute | CyberArmy Intelligence & Security | CyberArmy Projects

[Deutsch] Einführung in in die WinSock-API


[Reply] [View by Thread] [Help]
[Back To Article Discussion Forum]

Posted by Author kasi On 2008-01-30 00:13:41




View and vote on the article here: Einführung in in die WinSock-API


Einführung in in die WinSock-API

Category
Deutsch
Summary
Einführung in die WinSock-API
Body
Netzwerkprogrammierung unter Win32-Plattformen geschieht meistens in Verbindung mit der WinSock-API. API steht für Application Programming Interface. WinSock ist dabei die Abkürzung für Windows Sockets. Vom Konzept her gleichen sie den Berkely (BSD) Sockets, welche auf UNIX-Systemen oft eingesetzt werden. Für Anfänger ist es wichtig zu verstehen, das WinSock nur ein Interface ist und kein Protokoll. Sockets sind im Prinzip Datei-Deskriptoren, haben allerdings kleinere Unterschiede zu denen. Per Definition ist es eine Struktur, die dem Transport dient. Dieser Artikel setzt fortgeschrittene Kenntnisse über Netzwerk-Konzepte und C/C++-Programmierung voraus.

Jede Windows-Version hat seine eigene WinSock-DLL. Ich nehme an, dass ihr WinSock in der Version 2.2 benutzt, da man diese in Windows 98 und 2000 findet. Um WinSock-Funktionen nutzen zu können, muss zuvor die WinSock-API-Bibliothek geladen werden. Dies geschieht folgendermaßen:
int WSAStartup(

    WORD  wVersionRequested,

    LPWSADATA  lpWSAData
);
Die Initialisierung erfolgt durch die 'WSAStartup'-Funktion. 'wVersionRequested' legt die zu benutzende WinSock-Version fest. Wenn die Bibiothek nicht geladen wurde, wird ein 'SOCKET_ERROR' ausgegeben, wobei die Details dazu in der 'WSANOTINITIALISED' zu finden sind.

Der nächste Schritt in der WinSock-Programmierung besteht darin, ein Socket mit einem bestimmten Protokoll zu verbinden. Dafür benutzt man den 'bind'-API-Call:
int bind(

    SOCKET s,

    const struct sockaddr FAR* name,

    int namelen

);
Nun gucken wir uns diese bestimmte Funktion etwas genauer an. Das folgende Beispiel wird euch helfen, den Code besser zu verstehen:
SOCKET s;

struct sockaddr_in tcpaddr;

int port = 1000;

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

tcpaddr.sin_family = AF_INET;

tcpaddr.sin_port = htons(port);

tcpaddr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(s, (SOCKADDR *)&tcpaddr, sizeof(tcpaddr));
Wir benutzen hier das TCP-Protokoll welches, im Gegensatz zu UDP, verbindungsorientiert ist. Die 'bind'-Funktion stellt eine Verbindung zwischen dem Socket und Port 1000 her. Unter Umständen ergibt dieser Code ein paar Fehler, meistens 'WSAEADDRINUSE'. Das bedeutet, dass schon ein anderer Prozess auf dem jeweiligen Port lauscht. Weitere Programmierung hängt davon ab, was das Programm werden soll, ein Client- oder Server-Programm.

Quellen:

Network Programming for Microsoft Windows von Anthony Jones und Jim Ohlund (Microsoft Press)

www.codeguru.com

www.programmersheaven.com

Geschrieben von Rae am 03. August 2005. Eingereicht am 28. April 2007.
Übersetzt von kasi am 16. Januar 2008.

This article was originally published by CyberArmy.net in the CyberArmy Library.





There are no replies to this post yet.



Guest:
Subject:
Message:
Signature:
Optional Image Link:
http://

CyberArmy::Forum v0.6
Generated In 0.00623 seconds


About Us | Privacy Policy | Mission Statement | Help