Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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..


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 ;)

PM Quote