用C语言在Windows上的IP地址和Socket.h

时间:2013-11-04 07:15:20

标签: c cross-platform winsock

在此代码中,目的是以简单的方式显示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并将其添加到目录中,但它没有帮助。

任何想法都会有所帮助。提前谢谢你。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

MinGW32不是多平台编译器。它是一个Windows编译器。 由于Windows具有不同的套接字处理功能,因此无法使用Windows的Linux代码。

您可以使用#ifdef来处理问题平台相关代码,但我认为您不想这样做。我建议你使用Cygwin。它正是出于这个目的:为Windows编译Linux代码而没有太大的变化。

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

答案 2 :(得分: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