Netzwerkprogrammierung
-
Hallo zusammen!
Ich Versuche folgenden Code zu kompilieren, jedoch zeigt mir der Linker einen Fehler an. Sowohl Visual Studio wie auch Dev-C++.
Irgendwas mit unresolved external symbol. Woran liegt das?
(Der Code ist aus dem Buch C von A bis Z)
/* client.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> /* Headerfiles für Windows */ #include <winsock.h> #include <io.h> #define PORT 1234 #define RCVBUFSIZE 8192 /* Funktion gibt aufgetrenene Fehler aus und * beendet die Anwendung */ static void error_exit(char *errorMessage) { fprintf(stderr,"%s: %d\n", errorMessage, WSAGetLastError()); exit(EXIT_FAILURE); } int main( int argc, char **argv) { struct sockaddr_in server; struct hostent *host_info; unsigned long addr; SOCKET sock; char *echo_string; int echo_len; /* Initialisiere TCP für Windows ("winsock") */ WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD (1, 1); if (WSAStartup (wVersionRequested, &wsaData) != 0) error_exit( "Fehler beim Initialisieren von Winsock"); /* Sind die erforderlichen Kommandozeilenargumente vorhanden? */ if (argc < 3) error_exit("usage: client server-ip echo_word\n"); /* Erzeuge das Socket */ sock = socket( AF_INET, SOCK_STREAM, 0 ); if (sock < 0) error_exit( "Fehler beim Anlegen eines Sockets"); /* Erzeuge die Socketadresse des Servers * Sie besteht aus Typ, IP-Adresse und Portnummer */ memset( &server, 0, sizeof (server)); if ((addr = inet_addr( argv[1])) != INADDR_NONE) { /* argv[1] ist eine numerische IP-Adresse */ memcpy( (char *)&server.sin_addr, &addr, sizeof(addr)); } else { /* Für den Fall der Fälle: Wandle den * Servernamen bspw. "localhost" in eine IP-Adresse um */ host_info = gethostbyname(argv[1]); if (NULL == host_info) error_exit("Unbekannter Server"); /* Server-IP-Adresse */ memcpy( (char *)&server.sin_addr, host_info->h_addr, host_info->h_length ); } /* IPv4-Verbindung */ server.sin_family = AF_INET; /* Portnummer */ server.sin_port = htons( PORT ); /* Baue die Verbindung zum Server auf */ if(connect(sock,(struct sockaddr*)&server,sizeof(server)) <0) error_exit("Kann keine Verbindung zum " "Server herstellen"); /* Zweites Argument wird als "echo" beim Server verwendet */ echo_string = argv[2]; /* Länge der Eingabe */ echo_len = strlen(echo_string); /* Denn String inskl. Nullterminator an den Server senden */ if (send(sock, echo_string, echo_len, 0) != echo_len) error_exit("send() hat eine unterschiedliche Anzahl" " von Bytes versendet, als erwartet !!!!"); /* Schließe Verbindung und Socket */ closesocket(sock); /* Cleanup Winsock */ WSACleanup(); return EXIT_SUCCESS; }
-
Musst die Socketlibrary (Kein Plan wie die heist) einbinden... Google mal etwas, wirst sicher fündig
Gruß
-
Hallo
Du must zusätzlich noch die Winsock-Library mit einlinken!
Dies machst du im Dev-C++ wie folgt:
Menu->Projekt->Projekt Optionen->(Tab)ParameterLade dort unter Linker die Bibliothek "libwsock32.a", die sich im Ordner "...\Dev-Cpp\lib\..." befindet.
-
Danke jetzt gehts mit Dev C++.
Mal schauen ob ich das in VS auch noch hinbekomme
-
'ws2_32' heisst die lib