在此代码中,目的是以简单的方式显示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并将其添加到目录中,但它没有帮助。
任何想法都会有所帮助。提前谢谢你。
答案 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 。