套接字错误无法在WinSock2.h中获取函数

我创build了一个套接字包装类,但我有太多的错误,我不知道如何解决。 我试过Winsock教程错误 , 不能在MSVC 2010中包含Winsock2.h ,但没用

这里是代码:

//#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 { }; 

这里是错误:

 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 

Solutions Collecting From Web of "套接字错误无法在WinSock2.h中获取函数"

您需要重新排序包含Windows头文件,如下所示:

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

换句话说, Windows.h之前必须包含WinSock头文件。

或者定义WIN32_LEAN_AND_MEAN ,由于某种原因你已经注释掉了。

我想你也需要改变Accept方法来返回SOCKET而不是Socket

#pragma应该是:

 #pragma comment(lib,"ws2_32") 

在包含WinSock2之前,不能包含Windows.h,因为这将导致Windows头文件包含旧版本的winsock。 完全删除Windows.h。

例如,请参阅此MSDN链接: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms737629 (v= vs.85).aspx第一个代码块下的注释部分解释了这一点。

我确信#include“Winsock2.h”在任何#include“windows.h”和“#include”Winsock.h之前,这就解决了这个问题。

只是一个耐心的问题,看一个一个包含并建立这个命令,首先#include“Winsock2.h”然后#include“windows.h”

我检查了递归包括,我发现头文件,其中包括(递归)一些#include“windows.h”和“#include”Winsock.h“,并写入#include”Winsock2.h“在这个文件,我补充#include“Winsock2.h”作为第一个包含。