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...