Fehler beim Starten von Winsock
-
Ich habe versucht in einem einfachem Programm Winsock zu initialisieren:
#include <windows.h> #include <winsock2.h> #include <iostream> using namespace std; int startWinsock(); int main() { if(startWinsock() == 0) cout << "WinSock gestartet!" << endl; else cout << "Fehler beim Starten von WinSock!"; return 0; } int startWinsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
Wenn ich versuche diesen Code zu kompilieren wirft er mir Fehlermeldungen aus die alle behaupten ich würde in winsock2.h so allerlei redefinieren. Ich benutze als IDE MVC++ 6. Ich weiß nicht ob es vielleicht damit zusammenhängt, dass ich vergessen hab irgendetwas einzustellen.
edit: Da zermartere ich mir den Kopf woran liegen könnte und kommen nicht auf das naheliegende. Offenbar ist Winsock auch in windows.h schon enthalten.
Order
-
Afaik ist dem normaler Weise aber nicht so
- klappt's denn jetzt?
-
ja, nachdem ich winsock2.h weggelassen habe klappt es.
edit: hab beim linker noch ws3_32.lib hinzugefügt, vielleicht hat es auch noch etwas damit zu tun
-
Diese Lib musst du natürlich auch linken
- mich wundert aber, dass du anscheinend winsock2.h nicht einbinden musst
- naja, wenn's läuft
-
stimmt hauptsache es läuft
Und hey, hier programmieren doch alle für Windows, und ihr wundert euch noch über seltsame Erscheinungen?
-
Naja ich finde sich für die WinAPI zu entscheiden gar nicht mal so unrational da es leider die meisten benutzen und benutzen werden
-
Nein, "wirtschaftlich" gesehen macht es auch Sinn die WinApi zu lernen und es wird wohl auch noch lange STandard bleiben. Mein letzter Post war mehr einer von der "Ich-hasse-Windows-benutze-es-aber-doch"-Sorte
-
Dummerweise neues Problem. Hab schon über ne Stunde über den paar Zeilen gebrütet und rumgeblättert, hab aber keine Lösung gefunden.
hostent* host = gethostbyname(Name); if(host == NULL) throw Connect_Error(); memcpy(&(addr.sin_addr),host->h_addr_list[0],4);
Ich versuche nur durch den Hostnamen die jeweilige IP herauszubekommen.
In addr.sin_addr.s_addr befindet sich nach dieser Operation aber nur eine sinnlose Zahl und nicht die gewünschte IP.
-
hostent* host = gethostbyname("www.google.de"); in_addr inet; inet.S_un.S_addr = *((unsigned long*)host->h_addr_list[0]); std::cout << inet_ntoa(inet);
-
Danke, Problem gelöst