2017-06-02 1 views
-3

Ich versuche, ein Array einer Struktur durch einen TCP-Socket zu senden, indem Sie es als ein Array von Bytes (char *) senden, und dann wieder in den ursprünglichen Strukturtyp auf der Empfangsende.Memcpy nach Socket empfangen funktioniert nicht

Die Struktur enthält die Daten eines Fotos und ist wie folgt:

struct photo{ //List that will store photo information 
    uint32_t id_photo; 
    char *file_name; 
    struct keyword * key_head; 
    struct photo * next; 
}; 

Dann habe ich es so senden:

photolist p_list[photocount];//Photo count = nº of elements to be sent 
for(int i = 0; i<photocount; i++){ 
    p_list[i]=*aux; 
    p_list[i].key_head = NULL; 
    aux = aux->next; 
} 
//Sending list of photos to the new peer 
buff = malloc(sizeof(photolist)*photocount); 
memcpy(buff, p_list, sizeof(photolist)*photocount); 
nbytes = send(fd, buff, sizeof(photolist)*photocount, 0); 

Schließlich ich es wie folgt erhalten (die Menge der Elemente das Array wurde zuvor erfolgreich empfangen):

buff = (char *) malloc(sizeof(photolist)*photosize); 
    nbytes = recv(sock_fd_server, buff, sizeof(photolist)*photosize, 0); 
    if(nbytes == -1){ 
     perror("Reciving"); 
     exit(-1); 
    } 
    photolist testlist[photosize]; 
    memcpy(testlist, buff, sizeof(photolist)*photosize); 

Allerdings, wenn ich versuche, von der EL zu drucken Nach Empfang der Struktur tritt ein Segmentierungsfehler auf. Ich habe vor dem Senden und nach dem Empfang einen Ausdruck des Puffers erstellt, nur um zu sehen, ob die Daten die gleichen sind, und es war, also habe ich keine Ahnung, was ich falsch mache. Jede Hilfe würde geschätzt werden, und danke im Voraus!

+0

Wenn ich richtig gelesen habe: "Irgendein Code, den ich nicht zeige, stürzt ab. Hier ist ein Kommunikationscode, der vielleicht nichts mit dem Problem zu tun hat" – John3136

Antwort

1

Sie haben nicht Definition von photolist bereitgestellt Aber Wenn Sie eine Struktur wie

struct photo{ //List that will store photo information 
    uint32_t id_photo; 
    char *file_name; 
    struct keyword * key_head; 
    struct photo * next; 
}; 

vom Client zum Server und den Zugriff auf file_name an Server senden, wird es nicht funktionieren wie datei_name Adresse enthält Client-Programm ist es nicht Gültig im Serverprogramm

+0

Oh, natürlich, wie dumm von mir! Vielen Dank und Entschuldigung für solch einen blöden Fehler! – TStriker

Verwandte Themen