Hilfe bei WinSock Programmierung



  • Hallo zusammen, habe jetzt vor kurzem mit der Winsock Programmierung angefangen, und habe Heute mal ein Kleines Programm mit einem Tutorial erstellt. Nur leider bekomm ich immer Folgende Fehler meldung:

    1>Verknüpfen...
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WSACleanup@0" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_closesocket@4" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_recv@16" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_send@16" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_connect@12" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_gethostbyname@4" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_inet_addr@4" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_htons@4" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_socket@12" in Funktion "_main".
    1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WSAStartup@8" in Funktion "_main".
    1>fatal error LNK1120: 10 nicht aufgelöste externe Verweise.
    1>TEST - 11 Fehler, 4 Warnung(en)
    

    Das ist der Code:

    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    
    #ifdef _WIN32
    #include <winsock.h>
    #include <io.h>
    #endif
    
    #define HTTP_PORT 80
    
    int main(int argc, char **argv)
    {
        int sock;
        struct sockaddr_in host_addr;
        struct hostent *hostinfo;
        char *host, *file;
        char command[1024];
        char buf[1024];
        int bytes_sent, bytes_recv;
    
        /* Ist der Aufruf korrekt? */
        if (argc != 3) {
            fprintf (stderr, "Aufruf: httprecv host file\n");
            exit (EXIT_FAILURE);
        }
    
        host = argv[1];
        file  = argv[2];
    
        /* ggf. Winsock initialisieren */
        #ifdef _WIN32
        WSADATA wsaData;
        if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
            fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
            exit (EXIT_FAILURE);
        }
        #endif
    
        /* Socket erzeugen */
        sock = socket (AF_INET, SOCK_STREAM, 0);
        if (sock == -1) {
            perror ("socket()");
            exit (EXIT_FAILURE);
        }
    
        /* Adresse des Servers festlegen */
        memset( &host_addr, 0, sizeof (host_addr));
        host_addr.sin_family = AF_INET;
        host_addr.sin_port = htons (HTTP_PORT);
    
        host_addr.sin_addr.s_addr = inet_addr (host);
        if (host_addr.sin_addr.s_addr == INADDR_NONE) {
            /* Server wurde nicht mit IP sondern mit dem Namen angegeben */
            hostinfo = gethostbyname (host);
            if (hostinfo == NULL) {
                perror ("gethostbyname()");
                exit (EXIT_FAILURE);
            }
            memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
        }
    
        /* Verbindung aufbauen */
        if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
            perror ("connect()");
            exit (EXIT_FAILURE);
        }
    
        /* HTTP-GET-Befehl erzeugen */
        sprintf (command, "GET %s HTTP/1.0\nHost: %s\n\n", file, host);
    
        /* Befehl senden */
        bytes_sent = send (sock, command, strlen (command), 0);
        if (bytes_sent == -1) {
            perror ("send()");
            exit (EXIT_FAILURE);
        }
    
        // Antwort des Servers empfangen und ausgeben */
        while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
            write (1, buf, bytes_recv);
        }
        if (bytes_recv == -1) {
            perror ("recv()");
            exit (EXIT_FAILURE);
        }
    
        printf ("\n");
    
        #ifdef _WIN32
        closesocket(sock);
        WSACleanup();
        #else
        close(sock);
        #endif
    
        return 0;
    
    }
    

    Bitte Helft mir.

    Mit freundlichen Gruß
    Kevin



  • Du hast eine lib vergessen mitzulinken, glaub die heißt ws2_32.lib



  • Danke Schonmal weist du wo ich die Downloaden kann. Hab bei google nix gefunden. THX nochmal.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die brauchst du normalerweise nicht downloaden. Probier mal folgendes:

    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    
    #ifdef _WIN32
    #include <winsock.h>
    #include <io.h>
    #endif
    
    #pragma comment(lib, "ws2_32.lib") // <-------------- ! Sollte das nicht funkionieren musst du das über die Einstellungen deines Compilers machen!
    
    #define HTTP_PORT 80
    
    int main(int argc, char **argv)
    {
        int sock;
        struct sockaddr_in host_addr;
        struct hostent *hostinfo;
        char *host, *file;
        char command[1024];
        char buf[1024];
        int bytes_sent, bytes_recv;
    
        /* Ist der Aufruf korrekt? */
        if (argc != 3) {
            fprintf (stderr, "Aufruf: httprecv host file\n");
            exit (EXIT_FAILURE);
        }
    
        host = argv[1];
        file  = argv[2];
    
        /* ggf. Winsock initialisieren */
        #ifdef _WIN32
        WSADATA wsaData;
        if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
            fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
            exit (EXIT_FAILURE);
        }
        #endif
    
        /* Socket erzeugen */
        sock = socket (AF_INET, SOCK_STREAM, 0);
        if (sock == -1) {
            perror ("socket()");
            exit (EXIT_FAILURE);
        }
    
        /* Adresse des Servers festlegen */
        memset( &host_addr, 0, sizeof (host_addr));
        host_addr.sin_family = AF_INET;
        host_addr.sin_port = htons (HTTP_PORT);
    
        host_addr.sin_addr.s_addr = inet_addr (host);
        if (host_addr.sin_addr.s_addr == INADDR_NONE) {
            /* Server wurde nicht mit IP sondern mit dem Namen angegeben */
            hostinfo = gethostbyname (host);
            if (hostinfo == NULL) {
                perror ("gethostbyname()");
                exit (EXIT_FAILURE);
            }
            memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
        }
    
        /* Verbindung aufbauen */
        if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
            perror ("connect()");
            exit (EXIT_FAILURE);
        }
    
        /* HTTP-GET-Befehl erzeugen */
        sprintf (command, "GET %s HTTP/1.0\nHost: %s\n\n", file, host);
    
        /* Befehl senden */
        bytes_sent = send (sock, command, strlen (command), 0);
        if (bytes_sent == -1) {
            perror ("send()");
            exit (EXIT_FAILURE);
        }
    
        // Antwort des Servers empfangen und ausgeben */
        while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
            write (1, buf, bytes_recv);
        }
        if (bytes_recv == -1) {
            perror ("recv()");
            exit (EXIT_FAILURE);
        }
    
        printf ("\n");
    
        #ifdef _WIN32
        closesocket(sock);
        WSACleanup();
        #else
        close(sock);
        #endif
    
        return 0;
    
    }
    

Anmelden zum Antworten