Ezi*_*aze 2 c c++ networking winapi
这是我用 C++ 编写的用于检索网络信息的代码:
#ifndef WIN_32_LEAN_AND_MEAN
#define WIN_32_LEAN_AND_MEAN
#endif
#include<windows.h>
#include<winsock2.h>
#include<iphlpapi.h>
#include<stdio.h>
#include<iostream>
#pragma comment(lib,"iphlpapi.lib")
using namespace std;
int main()
{
FIXED_INFO *pFixedInfo;
IP_ADDR_STRING *pIPAddr;
ULONG ulOutBuflen;
DWORD dwRetVal;
pFixedInfo = (FIXED_INFO *)malloc(sizeof(FIXED_INFO));
ulOutBuflen = sizeof(FIXED_INFO);
if (GetNetworkParams(pFixedInfo, &ulOutBuflen) == ERROR_BUFFER_OVERFLOW) {
free(pFixedInfo);
pFixedInfo = (FIXED_INFO *)malloc(sizeof(ulOutBuflen));
if (pFixedInfo == NULL)
cout << "Error allocating memory needed to call GetNetworkParams \n";
}
if(dwRetVal=GetNetworkParams(pFixedInfo,&ulOutBuflen)!=NO_ERROR){
cout << "GetNetwrokParams failed : " << dwRetVal << endl;
if (pFixedInfo)
free(pFixedInfo);
}
cout << "Host Name : " << pFixedInfo->HostName;
cout << "Domain Name : " << pFixedInfo->DomainName;
cout << "DNS Server s : " << endl;
cout << pFixedInfo->DnsServerList.IpAddress.String<<endl;
pIPAddr = pFixedInfo->DnsServerList.Next;
while (pIPAddr)
{
cout << pIPAddr->IpAddress.String << endl;
pIPAddr = pIPAddr->Next;
}
cout << "Node Type : ";
switch (pFixedInfo->NodeType)
{
case 1:
cout << "Broadcast " << endl;
break;
case 2:
cout << "Peer to Peer " << endl;
break;
case 4:
cout << "Mixed " << endl;
break;
case 8:
cout << "Hybrid " << endl;
break;
default :
cout << endl;
}
cout << "NetBios Scope ID : " << pFixedInfo->ScopeId<<endl;
if (pFixedInfo->EnableRouting)
cout << "Routing enabled on " << endl;
else
cout << "Routing enabled of" << endl;
if (pFixedInfo->EnableProxy)
cout << "Proxy enabled " << endl;
else
cout << "Proxy disabled " << endl;
if (pFixedInfo->EnableDns)
cout << "NETBIOS Resolution uses dns " << endl;
else
cout << "NETBIOS Resolution does not uses dns " << endl;
if (pFixedInfo) {
free(pFixedInfo);
pFixedInfo = NULL;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每次我运行代码时,它都会显示一堆错误。我已经从 MSDN 获取了代码,但它仍然不起作用。
任何人都可以建议对代码进行任何改进吗?
以下是错误:
Severity Code Description Project File Line Suppression State
Warning C4005 'IN_CLASSB': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 578
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 437
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 438
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 439
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 446
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 452
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 453
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 454
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 470
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 480
Error (active) E0040 expected an identifier Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h 482
Error (active) E0338 more than one instance of overloaded function "__WSAFDIsSet" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 141
Error (active) E0338 more than one instance of overloaded function "accept" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1624
Error (active) E0338 more than one instance of overloaded function "bind" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1646
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "closesocket" (declared at line 749 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1667
Error (active) E0338 more than one instance of overloaded function "connect" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1684
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "ioctlsocket" (declared at line 756 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1705
Error (active) E0338 more than one instance of overloaded function "getpeername" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1728
Error (active) E0338 more than one instance of overloaded function "getsockname" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1749
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "getsockopt" (declared at line 771 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1770
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "htonl" (declared at line 778 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1795
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "htons" (declared at line 780 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1812
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "inet_addr" (declared at line 782 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1830
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "inet_ntoa" (declared at line 784 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1848
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "listen" (declared at line 786 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1948
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "ntohl" (declared at line 790 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1967
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "ntohs" (declared at line 792 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 1984
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "recv" (declared at line 794 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2001
Error (active) E0338 more than one instance of overloaded function "recvfrom" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2024
Error (active) E0338 more than one instance of overloaded function "select" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2051
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "send" (declared at line 815 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2076
Error (active) E0338 more than one instance of overloaded function "sendto" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2099
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "setsockopt" (declared at line 829 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2126
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "shutdown" (declared at line 836 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2151
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "socket" (declared at line 840 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2171
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2196
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2218
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "gethostname" (declared at line 854 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2235
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2275
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2294
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2313
Error (active) E0311 cannot overload functions distinguished by return type alone Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2330
Error (active) E0338 more than one instance of overloaded function "WSAStartup" has 'C' linkage Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2350
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSACleanup" (declared at line 876 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2370
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSASetLastError" (declared at line 878 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2387
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAGetLastError" (declared at line 880 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2404
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAIsBlocking" (declared at line 882 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2425
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAUnhookBlockingHook" (declared at line 884 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2443
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSASetBlockingHook" (declared at line 886 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2461
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSACancelBlockingCall" (declared at line 888 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2479
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetServByName" (declared at line 890 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2497
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetServByPort" (declared at line 898 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2525
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetProtoByName" (declared at line 906 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2553
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetProtoByNumber" (declared at line 913 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2579
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetHostByName" (declared at line 920 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2605
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncGetHostByAddr" (declared at line 927 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2631
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSACancelAsyncRequest" (declared at line 936 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2661
Error (active) E1389 redeclaration cannot add dllexport/dllimport to "WSAAsyncSelect" (declared at line 938 of "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winsock.h") Project1 c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinSock2.h 2679
Warning C4005 'AF_IPX': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 103
Warning C4005 'AF_MAX': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 147
Warning C4005 'SO_DONTLINGER': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 185
Error C2011 'sockaddr': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 235
Error C2059 syntax error: 'constant' Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 437
Error C3805 'constant': unexpected token, expected either '}' or a ',' Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 437
Warning C4005 'IN_CLASSA': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 572
Warning C4005 'IN_CLASSC': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 584
Warning C4005 'INADDR_ANY': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 595
Warning C4005 'INADDR_BROADCAST': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 597
Error C2011 'sockaddr_in': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\shared\ws2def.h 633
Error C2011 'fd_set': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 136
Warning C4005 'FD_CLR': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 156
Warning C4005 'FD_SET': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 171
Error C2011 'timeval': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 180
Error C2011 'hostent': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 236
Error C2011 'netent': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 249
Error C2011 'servent': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 256
Error C2011 'protoent': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 268
Error C2011 'WSAData': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 364
Error C2011 'sockproto': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 462
Error C2011 'linger': 'struct' type redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 504
Warning C4005 'SOMAXCONN': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 517
Warning C4005 'FD_READ': macro redefinition Project1 c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\winsock2.h 551
Warning C4005 'FD_WRITE': macro redefinition Project1 c:\program files (x86)\windows kits\10\
如果_WIN32_WINNT是< 0x0400,则windows.h包括winsock.h它并且winsock2.h尚未包括在内。
如果_WIN32_WINNT是>= 0x0400,则windows.h包括winsock2.h而不是winsock.h。
winsock.h与 不兼容winsock2.h,因此如果winsock.h之前包含,则会winsock2.h发生各种错误,包括您所看到的类型。但是,如果winsock2.h之前被包含winsock.h,它会winsock.h为您禁用以避免错误。
因此,要禁用winsock.h以便您可以使用winsock2.h,您需要:
确保_WIN32_WINNT是>= 0x0400。
移动#include<winsock2.h>上述#include<windows.h>
在#define _WINSOCKAPI_上面添加#include<windows.h>
另外,附带说明一下,WIN_32_LEAN_AND_MEAN需要WIN32_LEAN_AND_MEAN改为。