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

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



    [Deutsch] Einführung in in die WinSock-API [View] [Reply] [Top]
    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.



     


CyberArmy::Forum v0.6
Generated In 0.00408 seconds


About Us | Privacy Policy | Mission Statement | Help