2012-02-01 5 views
12

Я следую инструкциям beej по созданию сетей, и это идет ДЕЙСТВИТЕЛЬНО хорошо, потому что я все хорошо понимаю, и он прекрасно это объясняет. однако, когда я хочу проверить некоторые из классных вещей, которые он показывает мне, это не сработает !. :(sockaddr_in uneclared identifier

Я не уверен, где именно sockaddr_in объявлена, но, может быть, кто-то здесь будет так помочь мне!

Вот что я до сих пор (тестируя преобразования 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; 
} 

Опять я совершенно невежественный, где все так, если это что-то очень глупо с моей стороны, извините

Edit: Я на Linux Debian дистрибутив называется Mint, если это вообще помогает?

ответ

22

The standard говорит:

Заголовок определяет структуру sockaddr_in

Вы должны включить <netinet/in.h> и объявить sin как это:

struct sockaddr_in sin; 
^^^^^^ 

Чтобы узнать, почему вам нужно ключевое слово struct, см. это C FAQ. Короче говоря, нет в С.

+0

что фиксированная моя главная проблема! netinet/in.h - отметил, спасибо! невзирая на другую ошибку, я ставлю in_addr вместо s_addr: p – user1169094

4

нет неявного typedef По ip(7) странице человека, также необходимо

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

прочитал большую часть описания и еще не понял его много, но я обязательно буду использовать эти справочные страницы для будущих ссылок на простые вещи, подобные этому. благодаря! – user1169094

Смежные вопросы