Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Socket in C: trasferimento di un'Immagine
Forum - C/C++ - Socket in C: trasferimento di un'Immagine

Avatar
R1C (Member)
Newbie


Messaggi: 17
Iscritto: 19/03/2011

Segnala al moderatore
Postato alle 18:02
Domenica, 12/08/2012
Salve ragazzi, come da titolo avrei un problema  nel salvare un'immagine da iphone a linux.
Non ci sono problemi di nessun genere per quanto riguarda la comunicazione e la richiesta di file.
Il problema sorge nell'acquisire un'immagine e salvarla correttamente su di un file creato da me. ecco il codice


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>


int main(int argc, char *argv[])
{
        int port = 22;                
        char IP[]="10.42.43.81";
        char risp[410000];
        FILE *fp;
        int i,e=1;
        int server, err, byte;
        struct sockaddr_in server_addr;
        char buffer[]="GET /var/mobile/Media/DCIM/100APPLE/IMG_0298.PNG HTTP/1.1\r\nHost: 10.42.43.81 \r\n\r\n";
        
        
        //      Creazione del socket
        server = socket(AF_INET, SOCK_STREAM, 0);

        //      Struttura relativa alle informazioni sul Server
        server_addr.sin_family          = AF_INET;
        server_addr.sin_port            = htons(port); //htons ---> host-order to network-order
        server_addr.sin_addr.s_addr     = inet_addr(IP); // inet_addr converte da dotted_decimal in network-order

        printf("\n\nConnessione in corso...\n");

        //      La funzione connect() restituisce un codice di errore
        err = connect (server, (struct sockaddr *)&server_addr, sizeof(server_addr));
        if(err == 0)
        {
                printf ("Connessione avvenuta\n");
                send (server,buffer,sizeof(buffer),0);
                
        fp=fopen("image.png","w+");
        if (fp == NULL) printf ("Errore creazione file\n");
        
else {
                
                int flag=1;
                //**************** problema :@
                while(e=recv (server, risp, sizeof(risp), 0)) {
                if (e<0) break; else {
                for (i=0;i<e;i++) {
                // queste condizioni sono per evitarmi l'header del pacchetto! ( un po primitiva )
                if (risp == '\n' && flag!=5) flag++;
                //usleep(200);
                if (flag==5)
                fprintf(fp,"%c",risp);
                }
                }
                }
                //***************************
                fclose(fp);
                }
                //printf ("n:%d\n",n);
                //printf ("\nServer: %s", risp);

        }
        else
        {
                perror (buffer);
        }

        printf("\n\n");
        
        //      Chiusura socket
        close(server);
        
}

DA NOTARE: la dimensione del file da me creato alla fine dell'eseguibile è identica al file originale dell'iphone, quindi non ci sono problemi di trasferimento..



Soli moriremo dal freddo, ma insieme possiamo farcela! L'Unione ci rende imbattibili....
PM Quote
Avatar
jack92 (Member)
Pro


Messaggi: 100
Iscritto: 06/08/2010

Segnala al moderatore
Postato alle 9:43
Mercoledì, 15/08/2012
Ciao, hai provato a creare il file in modalità binaria?
Codice sorgente - presumibilmente Plain Text

  1. fp=fopen("image.png","wb");


http://it.wikibooks.org/wiki/C/Lettura_e_scrittura_su_file

P.S. Ricordati l'uso del tag code se scrivi del codice ;)


"Il sapere umano appartiene al mondo"
PM Quote