2012-02-01 128 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