sockaddr_in未声明的标识符

时间:2012-02-01 20:03:44

标签: c sockets

我正在关注beej的网络指南,它一直很好,因为我对一切都很了解,他解释得很好。然而,当我想测试他向我展示的一些很酷的东西时,它将无法正常工作! :(

我不确定sockaddr_in的确切位置,但也许有人会这样帮助我!

这是我到目前为止所测试的(测试将字符串形式的ip转换为ip转换为4字节整数,反之亦然):

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main(void)
{
  sockaddr_in sin;

  inet_pton(AF_INET, "192.168.2.1", &sin.in_addr);
  char ip[INET_ADDRSTRLEN];
  inet_ntop(AF_INET, &sin.in_addr, ip, INET_ADDRSTRLEN);
  printf("%s\n", ip);

  return 0;
}

如果对我来说真的很蠢,对不起,我完全不知道一切都是如此,对不起!

编辑:我正在使用名为Mint的Linux Debian发行版,如果它有帮助吗?

2 个答案:

答案 0 :(得分:27)

The standard说:

  

标题应定义sockaddr_in结构

您必须包含<netinet/in.h>并声明sin,如下所示:

struct sockaddr_in sin;
^^^^^^

要了解您需要struct关键字的原因,请参阅此C FAQ。长话短说,C中没有隐含的typedef

答案 1 :(得分:5)

根据ip(7)手册页,您还需要

   #include <sys/socket.h>
   #include <netinet/in.h>
   #include <netinet/ip.h>