-1

在此代码中,目的是以简单的方式显示 IP 地址。

/* Simple IP getter, working on Linux. */

#include <stdio.h>
#include <unistd.h>
#include <string.h> // for strncpy  

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>

int
main()
{
    int fd;
    struct ifreq ifr;

    fd = socket(AF_INET, SOCK_DGRAM, 0);

    // I want to get an IPv4 IP address  
    ifr.ifr_addr.sa_family = AF_INET;

    // I want IP address attached to "eth0"  
    strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);

    ioctl(fd, SIOCGIFADDR, &ifr);

    close(fd);

    // display result  
    printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

    return 0;
}

它适用于 Linux,但如果您尝试在 windows 上使用 mingw32 编译它,即使使用 -lw32_.. 它也不起作用。

我试图找到 winsock.dll 并将其添加到目录中,但它没有帮助。

任何想法都会有所帮助。先感谢您。

4

3 回答 3

1

我不熟悉Linux;但是,在 Windows 中,您需要使用 winsock 库。以下链接提供了有关 winsock 的更多信息。 Winsock 入门我已经基于它实现了我自己的类。

于 2013-11-04T07:39:23.663 回答
0

MinGW32 不是多平台编译器。它是一个 Windows 编译器。因为 Windows 有不同的套接字处理函数,所以不能使用 Windows 的 Linux 代码。

您可以使用#ifdefs 来处理问题平台相关代码,但我认为您不想这样做。我建议你使用 Cygwin。正是为了这个目的:为 Windows 编译 Linux 代码而无需进行太多更改。

Netbeans 有一个很好的描述如何配置它以使用 Cygwin 编译。

于 2013-11-04T07:39:01.970 回答
0

这是winsock客户端代码示例: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms737591 (v=vs.85).aspx ,这里是服务器代码:http://msdn .microsoft.com/en-us/library/windows/desktop/ms737593(v=vs.85).aspx。并使用Microsoft Visual Studio Express

于 2013-11-04T07:39:23.640 回答