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; }