2012-02-01 15 views
12

Sto seguendo insieme alla guida di beej per il networking ed è stato DAVVERO buono perché capisco tutto molto bene e lui lo spiega alla grande. tuttavia, quando voglio testare alcune delle cose interessanti che mi sta mostrando, non funzionerà !. :(sockaddr_in identificatore non dichiarato

io non sono sicuro di dove esattamente sockaddr_in è dichiarata ma forse qualcuno qui sarà così mi aiuti!

Ecco quello che ho finora (testare la conversione di un IP in forma di stringa di un IP ad un 4 byte integrale e viceversa):

#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; 
} 

Anche in questo caso io sono completamente all'oscuro di dove tutto è così se si tratta di qualcosa di veramente stupido da parte mia, mi dispiace

Edit: sono su una Debian Linux la distro chiamata Mint se questo aiuta affatto?

risposta

22

The standard dice:

L'intestazione definisce la struttura sockaddr_in

Bisogna includere <netinet/in.h> e dichiarare sin come questo:

struct sockaddr_in sin; 
^^^^^^ 

Per scoprire perché avete bisogno la parola chiave struct, vedere questo C FAQ. Per farla breve, non c'è implicita typedef in C.

+0

che risolto il mio problema principale! netinet/in.h - annotato, grazie! Per quanto riguarda l'altro errore ho messo in_addr al posto di s_addr: p – user1169094

4

Secondo ip(7) pagina man, è necessario anche

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

ho letto la maggior parte della descrizione e non ne ho capito molto, ancora, ma userò sicuramente quelle pagine man per riferimenti futuri su cose semplici come questa. Grazie! – user1169094

Problemi correlati