Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    socket c - risoluzione di indirizzai

    Salve a tutti,
    mi sto cimentando con i socket in c ed ho dei problemi con la funzione connect.
    Devo inizializzare la struttura sockaddr_in per connettermi al server e per ottenere l'indirizzo di quest'ultimo trovo sempre questa dicitura:
    codice:
    struct hostent *hp;
    hp = gethostbyname("xxx.it");
    memcpy(&addr.sin_addr, hp->h_addr,4);
    connect (socket,&addr,sizeof(addr));
    la struttura hostent ha questa forma:
    codice:
    struct hostent{
    char *h_name;
    char **h_alias;
    int h_addrtype;
    int h_legth;
    char **h_addr_list;
    }
    La mia domanda è: come fa a copiare, attraverso la memcpy, l'indirizzo del server con il campo hp->h_addr se questo non esiste? Nella struttura non c'è.
    Se invece io già conosco l'indirizzo ip del server come faccio ad inserirlo nella struttura addr.sin_addr?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Scusate, ho risolto da solo. Spiego l'arcano se a qualcuno può interessare.
    Come sicuramente molti sapete, ad un server possono corrispondere più indirizzi IP, questo è il caso di server replicati. Nella struttura questi indirizzi vengono memorizzati nel campo h_addr_list. Contrariamente a quanti siti internet dicono, la struttura hostent contiene un'altro campo, che è h_addr che contiene proprio il primo indirizzo di h_addr_list. Quindi ora è tutto chiaro, spero anche per gli altri.

    AVVISO PER HTML.IT
    Data l'utilità del forum e il gran numero di utenti che vi partecipano vorrei proporre di inserire un sotto-forum di programmazione per il C vista l'importanza che ricopre e dato che è molto usato nella didattica universitaria. Che ne dite?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Non riesco cmq a settare il campo. Ho il seguente errore nella memcoy: deferencing pointer to incomplete type
    codice:
    int main(){
    
    int sock;
    char hostname[1024];
    hostname[1023] = '\0';
    gethostname(hostname, 1023);
    
    struct sockaddr_in addr;
    struct hostent *h = gethostbyname(hostname);
    
    addr.sin_port = 4000;//porta del server
    addr.sin_family = AF_INET;
    memcpy((char *)&addr.sin_addr, (char *)h->h_addr_list[0], 4);
    sock = socket(AF_INET,SOCK_STREAM,0);
    }
    Ho fatto come dice oregon in un'altro post ma a me non va

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.