主题:winsockt问题求助!!
小弟刚开始学windows network programming, 不太清楚怎么在window xp下设置参数来run winsock based的程序. 下面是我在网上找的一个程序:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char *nodename;
WSADATA wsaData;
struct addrinfo hints;
struct addrinfo * ai, * ai0;
int e;
/* parsing command line argument */
if (argc != 2) {
fprintf(stderr, "syntax: getv6addr HOSTNAME\n");
exit(1);
}
nodename = argv[1];
/* initilizing Windows Socket */
WSAStartup(MAKEWORD(2, 2), &wsaData);
/* resolving "www.ipv6style.jp" */
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
if (e = getaddrinfo(nodename, NULL, &hints, &ai0)) {
fprintf(stderr, "%s: %s\n", nodename, gai_strerror(e));
WSACleanup();
exit(1);
}
/* print IPv6 address if resolv process is succeeded */
for (ai = ai0; ai; ai = ai->ai_next) {
char v6addrstr[NI_MAXHOST];
getnameinfo(ai->ai_addr, ai->ai_addrlen,
v6addrstr, sizeof(v6addrstr), NULL, 0, NI_NUMERICHOST);
printf("%s IPv6 address: %s\n", nodename, v6addrstr);
}
/* cleanup */
freeaddrinfo(ai0);
WSACleanup();
}
我用Dev-C++编译的话, 错误如下:
[Linker error] undefined reference to `getaddrinfo@16'
[Linker error] undefined reference to `gai_strerrorA@4'
[Linker error] undefined reference to `getnameinfo@28'
[Linker error] undefined reference to `freeaddrinfo@4'
我用Visual C++ 6.0编译的话错误更多:
error C2079: 'hints' uses undefined struct 'addrinfo'
error C2228: left of '.ai_flags' must have class/struct/union type
error C2065: 'AI_CANONNAME' : undeclared identifier
error C2228: left of '.ai_family' must have class/struct/union type
error C2228: left of '.ai_socktype' must have class/struct/union type
error C2228: left of '.ai_protocol' must have class/struct/union type
error C2065: 'getaddrinfo' : undeclared identifier
我参照过网上的一些说明, 在link的时候设置了连接到ws2_32.lib了的,而且电脑里已经安装了Microsoft Platform SDK for Windows Server 2003 SP1 .
试了很多次都不行, 抓狂了, 恳求各位大大指点一二!!
万分感谢!!! [em2]
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char *nodename;
WSADATA wsaData;
struct addrinfo hints;
struct addrinfo * ai, * ai0;
int e;
/* parsing command line argument */
if (argc != 2) {
fprintf(stderr, "syntax: getv6addr HOSTNAME\n");
exit(1);
}
nodename = argv[1];
/* initilizing Windows Socket */
WSAStartup(MAKEWORD(2, 2), &wsaData);
/* resolving "www.ipv6style.jp" */
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
if (e = getaddrinfo(nodename, NULL, &hints, &ai0)) {
fprintf(stderr, "%s: %s\n", nodename, gai_strerror(e));
WSACleanup();
exit(1);
}
/* print IPv6 address if resolv process is succeeded */
for (ai = ai0; ai; ai = ai->ai_next) {
char v6addrstr[NI_MAXHOST];
getnameinfo(ai->ai_addr, ai->ai_addrlen,
v6addrstr, sizeof(v6addrstr), NULL, 0, NI_NUMERICHOST);
printf("%s IPv6 address: %s\n", nodename, v6addrstr);
}
/* cleanup */
freeaddrinfo(ai0);
WSACleanup();
}
我用Dev-C++编译的话, 错误如下:
[Linker error] undefined reference to `getaddrinfo@16'
[Linker error] undefined reference to `gai_strerrorA@4'
[Linker error] undefined reference to `getnameinfo@28'
[Linker error] undefined reference to `freeaddrinfo@4'
我用Visual C++ 6.0编译的话错误更多:
error C2079: 'hints' uses undefined struct 'addrinfo'
error C2228: left of '.ai_flags' must have class/struct/union type
error C2065: 'AI_CANONNAME' : undeclared identifier
error C2228: left of '.ai_family' must have class/struct/union type
error C2228: left of '.ai_socktype' must have class/struct/union type
error C2228: left of '.ai_protocol' must have class/struct/union type
error C2065: 'getaddrinfo' : undeclared identifier
我参照过网上的一些说明, 在link的时候设置了连接到ws2_32.lib了的,而且电脑里已经安装了Microsoft Platform SDK for Windows Server 2003 SP1 .
试了很多次都不行, 抓狂了, 恳求各位大大指点一二!!
万分感谢!!! [em2]