Socket-Fehler können keine Funktionen in WinSock2.h abrufen [duplicate]

Lesezeit: 13 Minuten

Ich habe eine Socket-Wrapper-Klasse erstellt, aber ich habe zu viele Fehler, die ich nicht lösen kann. Ich habe den Winsock-Tutorial-Fehler ausprobiert und kann Winsock2.h nicht in MSVC 2010 einfügen, aber ohne Nutzen

Hier ist der Code:

//#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <string>
#include <Windows.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma  comment(lib,"ws2_32_lib")
using namespace std;
#define WM_SOCKET 0x10000

class Socket 
{


}; 

Hier die Fehler:

Error   107 error C3861: 'WSAStartup': identifier not found \85 1   Project2_SocketLib
Error   89  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   696 1   Project2_SocketLib
Error   90  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   703 1   Project2_SocketLib
Error   91  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   742 1   Project2_SocketLib
Error   92  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   749 1   Project2_SocketLib
Error   93  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   793 1   Project2_SocketLib
Error   94  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   800 1   Project2_SocketLib
Error   95  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   841 1   Project2_SocketLib
Error   96  error C3861: 'WSASetLastError': identifier not found    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h   848 1   Project2_SocketLib
Error   109 error C3861: 'WSAGetLastError': identifier not found    \87 1   Project2_SocketLib
Error   112 error C3861: 'WSAGetLastError': identifier not found    \93 1   Project2_SocketLib
Error   105 error C3861: 'WSACleanup': identifier not found \63 1   Project2_SocketLib
Error   103 error C3861: 'shutdown': identifier not found   \57 1   Project2_SocketLib
Error   100 error C3861: 'send': identifier not found   \37 1   Project2_SocketLib
Error   101 error C3861: 'send': identifier not found   \43 1   Project2_SocketLib
Error   98  error C3861: 'recv': identifier not found   \31 1   Project2_SocketLib
Error   99  error C3861: 'recv': identifier not found   \34 1   Project2_SocketLib
Error   116 error C3861: 'inet_ntoa': identifier not found  \115    1   Project2_SocketLib
Error   119 error C3861: 'htons': identifier not found  \137    1   Project2_SocketLib
Error   126 error C3861: 'htonl': identifier not found  \139    1   Project2_SocketLib
Error   104 error C3861: 'closesocket': identifier not found    \58 1   Project2_SocketLib
Error   102 error C3861: 'accept': identifier not found \50 1   Project2_SocketLib
Error   6   error C3805: 'constant': unexpected token, expected either '}' or a ',' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 414 1   Project2_SocketLib
Error   108 error C2568: '+' : unable to resolve function overload  \87 1   Project2_SocketLib
Error   111 error C2568: '+' : unable to resolve function overload  \93 1   Project2_SocketLib
Error   124 error C2568: ':' : unable to resolve function overload  \139    1   Project2_SocketLib
Error   125 error C2446: ':' : no conversion from 'unsigned long (__stdcall *)(const char *)' to 'u_long (__stdcall *)(u_long)' \139    1   Project2_SocketLib
Error   106 error C2440: '=' : cannot convert from 'WSADATA' to 'int'   \75 1   Project2_SocketLib
Error   110 error C2440: '=' : cannot convert from 'SOCKET (__stdcall *)(int,int,int)' to 'SOCKET'  \90 1   Project2_SocketLib
Error   115 error C2440: '=' : cannot convert from 'char *(__stdcall *)(in_addr)' to 'std::string'  \115    1   Project2_SocketLib
Error   66  error C2375: 'WSAUnhookBlockingHook' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2383    1   Project2_SocketLib
Error   61  error C2375: 'WSAStartup' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2296    1   Project2_SocketLib
Error   63  error C2375: 'WSASetLastError' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2332    1   Project2_SocketLib
Error   67  error C2375: 'WSASetBlockingHook' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2400    1   Project2_SocketLib
Error   65  error C2375: 'WSAIsBlocking' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2366    1   Project2_SocketLib
Error   64  error C2375: 'WSAGetLastError' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2349    1   Project2_SocketLib
Error   62  error C2375: 'WSACleanup' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2315    1   Project2_SocketLib
Error   68  error C2375: 'WSACancelBlockingCall' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2417    1   Project2_SocketLib
Error   75  error C2375: 'WSACancelAsyncRequest' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2592    1   Project2_SocketLib
Error   76  error C2375: 'WSAAsyncSelect' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2612    1   Project2_SocketLib
Error   70  error C2375: 'WSAAsyncGetServByPort' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2466    1   Project2_SocketLib
Error   69  error C2375: 'WSAAsyncGetServByName' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2439    1   Project2_SocketLib
Error   72  error C2375: 'WSAAsyncGetProtoByNumber' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2517    1   Project2_SocketLib
Error   71  error C2375: 'WSAAsyncGetProtoByName' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2492    1   Project2_SocketLib
Error   73  error C2375: 'WSAAsyncGetHostByName' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2542    1   Project2_SocketLib
Error   74  error C2375: 'WSAAsyncGetHostByAddr' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2569    1   Project2_SocketLib
Error   53  error C2375: 'socket' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2120    1   Project2_SocketLib
Error   52  error C2375: 'shutdown' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2099    1   Project2_SocketLib
Error   51  error C2375: 'setsockopt' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2077    1   Project2_SocketLib
Error   50  error C2375: 'sendto' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2051    1   Project2_SocketLib
Error   49  error C2375: 'send' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2026    1   Project2_SocketLib
Error   48  error C2375: 'select' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2002    1   Project2_SocketLib
Error   47  error C2375: 'recvfrom' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1976    1   Project2_SocketLib
Error   46  error C2375: 'recv' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1951    1   Project2_SocketLib
Error   45  error C2375: 'ntohs' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1931    1   Project2_SocketLib
Error   44  error C2375: 'ntohl' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1914    1   Project2_SocketLib
Error   43  error C2375: 'listen' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1896    1   Project2_SocketLib
Error   35  error C2375: 'ioctlsocket' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1658    1   Project2_SocketLib
Error   42  error C2375: 'inet_ntoa' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1795    1   Project2_SocketLib
Error   41  error C2375: 'inet_addr' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1778    1   Project2_SocketLib
Error   40  error C2375: 'htons' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1761    1   Project2_SocketLib
Error   39  error C2375: 'htonl' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1744    1   Project2_SocketLib
Error   38  error C2375: 'getsockopt' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1723    1   Project2_SocketLib
Error   37  error C2375: 'getsockname' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1700    1   Project2_SocketLib
Error   57  error C2375: 'getservbyport' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2221    1   Project2_SocketLib
Error   58  error C2375: 'getservbyname' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2240    1   Project2_SocketLib
Error   59  error C2375: 'getprotobynumber' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2258    1   Project2_SocketLib
Error   60  error C2375: 'getprotobyname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2275    1   Project2_SocketLib
Error   36  error C2375: 'getpeername' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1679    1   Project2_SocketLib
Error   56  error C2375: 'gethostname' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2181    1   Project2_SocketLib
Error   55  error C2375: 'gethostbyname' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2163    1   Project2_SocketLib
Error   54  error C2375: 'gethostbyaddr' : redefinition; different linkage  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   2144    1   Project2_SocketLib
Error   34  error C2375: 'connect' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1637    1   Project2_SocketLib
Error   33  error C2375: 'closesocket' : redefinition; different linkage    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1618    1   Project2_SocketLib
Error   32  error C2375: 'bind' : redefinition; different linkage   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1599    1   Project2_SocketLib
Error   31  error C2375: 'accept' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   1577    1   Project2_SocketLib
Error   118 error C2228: left of '.sin_port' must have class/struct/union   \137    1   Project2_SocketLib
Error   120 error C2228: left of '.sin_family' must have class/struct/union \138    1   Project2_SocketLib
Error   121 error C2228: left of '.sin_addr' must have class/struct/union   \139    1   Project2_SocketLib
Error   122 error C2228: left of '.S_un' must have class/struct/union   \139    1   Project2_SocketLib
Error   123 error C2228: left of '.S_addr' must have class/struct/union \139    1   Project2_SocketLib
Error   114 error C2227: left of '->sin_addr' must point to class/struct/union/generic type \115    1   Project2_SocketLib
Error   97  error C2079: 'Socket::wsaData' uses undefined struct 'WSAData'  \18 1   Project2_SocketLib
Error   117 error C2079: 'sockAddrIn' uses undefined struct 'sockaddr_in'   \135    1   Project2_SocketLib
Error   78  error C2079: 'sockaddr_gen::AddressIn' uses undefined struct 'sockaddr_in'  C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h   81  1   Project2_SocketLib
Error   77  error C2079: 'sockaddr_gen::Address' uses undefined struct 'sockaddr'   C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h   80  1   Project2_SocketLib
Error   87  error C2079: '_SOCKADDR_INET::Ipv4' uses undefined struct 'sockaddr_in' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h   202 1   Project2_SocketLib
Error   5   error C2059: syntax error : 'constant'  C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 414 1   Project2_SocketLib
Error   113 error C2027: use of undefined type 'sockaddr_in'    \115    1   Project2_SocketLib
Error   21  error C2011: 'WSAData' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   353 1   Project2_SocketLib
Error   16  error C2011: 'timeval' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   169 1   Project2_SocketLib
Error   22  error C2011: 'sockproto' : 'struct' type redefinition   C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   451 1   Project2_SocketLib
Error   12  error C2011: 'sockaddr_in' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 608 1   Project2_SocketLib
Error   4   error C2011: 'sockaddr' : 'struct' type redefinition    C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 217 1   Project2_SocketLib
Error   19  error C2011: 'servent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   245 1   Project2_SocketLib
Error   20  error C2011: 'protoent' : 'struct' type redefinition    C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   257 1   Project2_SocketLib
Error   18  error C2011: 'netent' : 'struct' type redefinition  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   238 1   Project2_SocketLib
Error   23  error C2011: 'linger' : 'struct' type redefinition  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   493 1   Project2_SocketLib
Error   88  error C2011: 'ip_mreq' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h   715 1   Project2_SocketLib
Error   17  error C2011: 'hostent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   225 1   Project2_SocketLib
Error   13  error C2011: 'fd_set' : 'struct' type redefinition  C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h   125 1   Project2_SocketLib
Error   127 error C1003: error count exceeds 100; stopping compilation  \139    1   Project2_SocketLib

Benutzeravatar von David Heffernan
David Heffernan

Sie müssen die Includes der Windows-Header wie folgt neu anordnen:

#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Windows.h>

Mit anderen Worten, die WinSock-Header müssen vorher eingebunden werden Windows.h.

Oder definieren WIN32_LEAN_AND_MEAN die Sie aus irgendeinem Grund auskommentiert haben.

Ich denke auch, dass du das ändern musst Accept Methode zurückzugeben SOCKET statt Socket.

Und das #pragma sollte sein:

#pragma comment(lib,"ws2_32")

  • In meinem Fall schließe ich nur ein WS2tcpip.h überall (andere 2 Dateien sind nicht enthalten, weil sie intern in dieser enthalten sind). Aber ich bekomme immer noch redefinition error für viele Funktionen. Die meisten dieser Funktionen sind unter deklariert #if INCL_WINSOCK_API_PROTOTYPES Block, der auf 1 definiert ist. Können Sie etwas dazu vorschlagen? Danke für die Hilfe!

    – Shivaraj Bhat

    21. Januar 2015 um 14:30 Uhr

  • Eine leere C++-Datei mit nur zwei Zeilen #include <WinSock2.h> Und #include <WS2tcpip.h> gibt viele Fehler für mich (VS2005). Die erste Fehlermeldung ist Fehler 1 Fehler C2146: Syntaxfehler: fehlendes ‘;’ vor Kennung ‘Byte’ C:\Program Files\Microsoft SDKs\Windows\v6.0\Include\in6addr.h 24

    – Mario Klebsch

    9. Dezember 2016 um 8:46 Uhr

  • haben #include <Windows.h> zwischen #include <Winsock2.h> Und #include <Ws2tcpip.h> das Problem behoben.

    – Mario Klebsch

    9. Dezember 2016 um 8:52 Uhr

Sie können Windows.h nicht einschließen, bevor Sie WinSock2 einschließen, da dies dazu führt, dass der Windows-Header eine ältere Version von Winsock enthält. Entfernen Sie das Include Windows.h vollständig.

Siehe zum Beispiel diesen MSDN-Link: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx
Der Hinweisteil unter dem ersten Codeblock erklärt dies.

  • Sie können einschließen windows.h Vor winsock2.h wenn du definierst _WINSOCKAPI_ vorweg. Das wird deaktiviert winsock.hwelche windows.h beinhaltet standardmäßig.

    – Rémy Lebeau

    19. März 2014 um 20:53 Uhr


  • @RemyLebeau: Wissen Sie, ob diese Definition “portabel” ist (dh in allen Versionen des SDK gleich)?. Diese MSDN-Seite sagt, dass Sie definieren können WIN32_LEAN_AND_MEAN, aber das ist nicht immer eine Option. Wie auch immer, ich denke, es ist am besten, Winsock2 einfach die Windows-Header einschließen zu lassen.

    – MikroVirus

    19. März 2014 um 23:24 Uhr


  • Ja, diese Definition ist in allen SDK-Versionen gleich. Es ist der Kopfschutz, der den Inhalt von schützt winsock.h aus mehreren Einschlüssen. winsock2.h definiert _WINSOCKAPI_ Etwas deaktivieren winsock.h Wenn winock2.h ist vorher enthalten winsock.h enthalten ist, um mehrfache Deklarationsfehler zu vermeiden. winsock2.h enthält nicht die Windows-Header.

    – Rémy Lebeau

    19. März 2014 um 23:27 Uhr


  • In meinem Fall füge ich einfach überall WS2tcpip.h hinzu (andere 2 Dateien sind nicht enthalten, weil sie intern in dieser Datei enthalten sind). Aber ich bekomme immer noch Neudefinitionsfehler für viele Funktionen. Die meisten dieser Funktionen sind unter #if INCL_WINSOCK_API_PROTOTYPES Block deklariert, der auf 1 definiert ist. Können Sie etwas dazu vorschlagen? Danke für die Hilfe!

    – Shivaraj Bhat

    22. Januar 2015 um 6:50 Uhr

Ich habe dafür gesorgt, dass ein #include “Winsock2.h” vor jedem #include “windows.h” und “#include “Winsock.h” steht, und das hat den Fall gelöst.

Nur eine Frage der Geduld, schauen Sie sich die Einbindungen nacheinander an und legen Sie diese Reihenfolge fest, zuerst #include “Winsock2.h” dann #include “windows.h”

Ich habe die rekursiven Includes überprüft, ich habe die Header-Dateien entdeckt, die (rekursiv) einige #include “windows.h” und “#include “Winsock.h” enthalten, und schreibe ein #include “Winsock2.h” in diese Dateien, fügte ich hinzu #include “Winsock2.h”` als erstes Include.

  • In meinem Fall füge ich einfach überall WS2tcpip.h hinzu (andere 2 Dateien sind nicht enthalten, weil sie intern in dieser Datei enthalten sind). Aber ich bekomme immer noch Neudefinitionsfehler für viele Funktionen. Die meisten dieser Funktionen sind unter #if INCL_WINSOCK_API_PROTOTYPES Block deklariert, der auf 1 definiert ist. Können Sie etwas dazu vorschlagen? Danke für die Hilfe!

    – Shivaraj Bhat

    22. Januar 2015 um 7:16 Uhr

1443940cookie-checkSocket-Fehler können keine Funktionen in WinSock2.h abrufen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy