winsock编译错误,它无法找到addrinfo结构和一些相关的函数

sil*_*ent 16 c++ gcc winsock

我刚刚通过"Beej的网络编程指南"一书开始学习winsock.我正在windows下编程并通过gcc运行它.这只是编写我的第一个服务器程序的开始,但是当我尝试编译时它给了我这些错误.

/* Server */
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;

const int winsockVersion = 2;
#define BACKLOG 10
#define PORT 3000


int main(void){

    WSADATA wsadata;
    if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){


        struct addrinfo hints, *res;

        memset(&hints,0,sizeof hints);
        hints.ai_family = AF_INET;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_flags = AI_PASSIVE;

        if ( getaddrinfo(NULL,PORT,&hints,&res) == 0 ){
            cout<<"-Call to get addrinfo successful!." << endl;
        }

        cout<<"res af_family" << res->ai_family << endl;
    }




    //clear stuff
    if( WSACleanup() != 0){
        cout<<"-WSACleanup unsuccessful" << endl;
    }else{
        cout<<"-WSACleanup successful" << endl;
    }


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这些是我收到的错误

g++ -o server.exe server.cpp -lws2_32
Process started >>>
server.cpp: In function `int main()':
server.cpp:20: error: aggregate `addrinfo hints' has incomplete type and cannot be defined
server.cpp:25: error: `AI_PASSIVE' was not declared in this scope
server.cpp:27: error: `getaddrinfo' was not declared in this scope
server.cpp:31: error: invalid use of undefined type `struct addrinfo'
server.cpp:20: error: forward declaration of `struct addrinfo'
server.cpp:54:2: warning: no newline at end of file
<<< Process finished.
Run Code Online (Sandbox Code Playgroud)

不应该在windows.h或winsock.h中定义结构和函数吗?

对任何偶然发现此事的人进行编辑,添加

#define _WIN32_WINNT 0x501
#include <ws2tcpip.h>
Run Code Online (Sandbox Code Playgroud)

如果getaddrinfo说它未声明,则在你的源代码顶部.

ice*_*ime 7

你可能想要#include <ws2tcpip.h>.请记住,在Stack Overflow之前,Google是您提出这类问题的朋友:您将从MSDN获得即时答案!

  • 需要添加`#define _WIN32_WINNT 0x501`,显然getaddrinfo有不同版本。 (2认同)
  • 让我们将这个细节添加到这个答案中,而不是问题,嗯? (2认同)