Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Winsock Problema Ricompattamento File

    Ciao...

    il mio problema sta nella ricezione di un file inviato, più specificamente di un DataBase Access (.mdb).

    Utilizzo una connessione con i Socket e nel Client faccio :
    codice:
    SOCKET       ServerContattoFile = socket(AF_INET, SOCK_STREAM, 0);
    
    sockaddr_in  ServiceContattoFile;
    
    char buffer[1000000]="";
    struct stat statbuf;
    
    FILE *file;
    file=fopen(DataBase.c_str(),"r+");
    fstat(fileno(file), &statbuf);
    
    fgets(buffer,statbuf.st_size,file);
    
    String FileSize=statbuf.st_size;
    fclose(file);
    
    ServiceContattoFile.sin_family = AF_INET;
    ServiceContattoFile.sin_addr.s_addr = inet_addr(IP.c_str());
    ServiceContattoFile.sin_port = htons(10010);
    
    connect(ServerContattoFile,(SOCKADDR*)&ServiceContattoFile,sizeof(ServiceContattoFile));
    
    send(ServerContattoFile,buffer,statbuf.st_size, 0);
    Oltre al Buffer (che e il contenuto del file) invio anche il contenuto della variabile FileSize che è la dimensione del file, così che nel Server faccio:
    codice:
    char buffer[1000000];
    Socket->ReceiveBuf(buffer,FileSize);
    
            bool newFile=true;
            HANDLE hFile;
            DWORD  dwWrite=FileSize;
            String DataBase=ROOTDIR+"DB.mdb";
            if(newFile==true)
            {
                    hFile =  CreateFile(DataBase.c_str(),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
                    newFile=false; 
            }
    
            if(WriteFile(hFile,buffer,FileSize,&dwWrite,NULL)==0)
                    ShowMessage("Errore di scrittura File.!");
    
            FileClose((int)hFile);
    Magari non e molto chiaro pero il problema sta nel fatto che il buffer arriva ed e uguale a quello inviato dal server, infatti il file viene creato correttamente e andamdo sulle sue proprieta da windows risulta avere le stesse dimensioni di quello originale, però se lo apro anche con access mi dice che non e un Database riconoscito, e non mi apre niente.

    Cosa puoi essere? la dimensione e sempre inferiore a 1000000 byte (1Mb) data dal valore nella variabile FileSize come quello del file inviato.

    Grazie a chi mi sa dare una mano...
    Il linguaggio migliore e quello che ti crei da solo...

  2. #2
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Sei sicuro che lato server ricevi tutto??
    Io farei una prova con un file di testo di piccolissime dimensioni (così riduci il buffer)...in questo modo puoi escludere che sia dovuto al fatto che cerchi di inviare il file tutto assieme con un buffer da 1000000 byte (forse è eccessivo?)
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  3. #3
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Non voglio dire che non puoi inviare file grandi, ma come puoi vedere dal codice che ti ho postato qualche tempo fa lo puoi fare spezzettandolo in dimensioni più piccole e ricomponendolo poi....poi magari l'errore è da qualche altra parte!

    http://forum.html.it/forum/showthrea...hreadid=734447

    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

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.