2012-02-01 127 views
12

我跟着beej的网络指南一直很好,因为我对一切都非常了解,他解释得很好。然而,当我想要测试他向我展示的一些很酷的东西时,它不会起作用! :(sockaddr_in未申报的标识符

我不知道哪儿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; 
} 

我再次来这里的一切是如此,如果这件事情真的很愚蠢对我而言完全无能,对不起

编辑:我在Linux的Debian如果有什么帮助的话,称为薄荷的发行?

回答

22

The standard说:

头应确定SOCKADDR_IN结构

你必须包括<netinet/in.h>并宣布sin这样的:

struct sockaddr_in sin; 
^^^^^^ 

要找出为什么你需要struct关键字,请参阅C FAQ。长话短说,有一个在C.

+0

是固定我的主要问题! netinet/in.h - 记下来,谢谢!关于其他错误我把in_addr,而不是s_addr:p – user1169094 2012-02-01 20:07:28

4

没有隐含typedef根据ip(7)手册页,你还需要

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

阅读大部分的描述,并没有理解它的很多,但是,我一定会使用这些手册页,以供将来参考这样的简单的东西。谢谢! – user1169094 2012-02-01 20:13:24