C代码从CentOS迁移到Windows^

C代码从CentOS迁移到Windows^,c,windows,sockets,centos,winsock,C,Windows,Sockets,Centos,Winsock,这是我代码的一部分 int sock; struct addrinfo hints,*res; int err; memset(&hints,0,sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; err = getaddrinfo(hostName,portNum,&hints,&res); struct sockaddr_in *addr; struct addr

这是我代码的一部分

int sock;
struct addrinfo hints,*res;
int err;
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_DGRAM;
err = getaddrinfo(hostName,portNum,&hints,&res);

struct sockaddr_in *addr;
struct addrinfo *rp;
for (rp = res; rp != NULL; rp = rp->ai_next) {

    addr = (struct sockaddr_in *)rp->ai_addr; 
    printf("dstPort  = %d\n",ntohs(addr->sin_port));
    printf("dstAddr  = %s\n",inet_ntoa((struct in_addr)addr->sin_addr));
    hostAddress = inet_ntoa((struct in_addr)addr->sin_addr);    
}
此代码将在Linux中成功编译,但不会在windows中编译

我已将一些头文件(如sys/socket.h)更改为winsock.h

我收到的信息如下

sample.c:32:18: error: storage size of 'hints' isn't known
  struct addrinfo hints,*res;
                  ^
sample.c:48:36: error: dereferencing pointer to incomplete type
  for (rp = res; rp != NULL; rp = rp->ai_next) {
                                    ^
sample.c:51:34: error: dereferencing pointer to incomplete type
   addr = (struct sockaddr_in *)rp->ai_addr;
我怎样才能修好它们

例如,关于实际指向提示的第一个错误,
^
如何使用
addrinfo
结构,而不是在windows中包含
netdb.h

我在windows7上的mingw+msys上编译了它

我添加为@selbie说

#include <WinSock2.h>
#include <WS2tcpip.h>
#包括
#包括
然后情况就变了

$ gcc -o udpSample.ot udpSample.c
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x11e): undefined reference to `getaddrinfo'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x19a): undefined reference to `ntohs@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x1be): undefined reference to `inet_ntoa@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x1df): undefined reference to `inet_ntoa@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x270): undefined reference to `udpServer' <- This is a my app.
C:\Users\Juser\AppData\Local\Temp\ccwFEwZi.o:udpSample.c:(.text+0x2e8): undefined reference to `udpClient' <- This is a my app too.
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:
 C:\Users\user\AppData\Local\Temp\ccwFEwZi.o: 
 bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
$gcc-o udpSample.ot udpSample.c
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.C:(.text+0x11e):未定义对“getaddrinfo”的引用
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.C:(.text+0x19a):未定义对的引用`ntohs@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.C:(.text+0x1be):对`inet'的未定义引用_ntoa@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.C:(.text+0x1df):对`inet'的未定义引用_ntoa@4'
C:\Users\user\AppData\Local\Temp\ccwFEwZi.o:udpSample.C:(.text+0x270):对“udpServer”的未定义引用缺少一个包含。在源文件顶部(或预编译头文件顶部)包含
winsock2.h
后,包含
ws2tcip.h
ws2def.h


@user1345414-现在转到ws2_32链接。lib@user1345414-并在程序启动时调用WSAStartup()。@user1345414-另外,由于我解决了您最初的问题,您应该决定投票和/或接受此答案。然后发布后续问题以解决链接错误(因为这是一个单独的问题)。否则,随着您继续进行移植工作,您的问题将很容易演变成越来越多的问题。
#include <WinSock2.h>
#include <WS2tcpip.h>
 WSAData data;
 WSAStartup(MAKEWORD(2,2), &data);