回 帖 发 新 帖 刷新版面

主题: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]

回复列表 (共3个回复)

沙发

Visual C++ 6.0
从错误看,在程序中,有三个变量不认识:hints、AI_CANONNAME、getaddrinfo。你必须先定义再使用。顺便说,这个程序应该在unix平台下运行。

板凳

这个程序不应该在 unix 下运行...
WSAStartup 这是 Winsock 的专有函数哦~~~

看看你有没有把 ws2_32.lib 包含进工程

3 楼

检查动态链接库设置,windows api最好用VC编译

我来回复

您尚未登录,请登录后再回复。点此登录或注册