PDA

View Full Version : [C]leggere file in modo binario


$te
23-01-2008, 17:58
ho due programmi client server, e voglio inviare un file (qualsiasi, non solo di testo) al server. credo che la via giusta sia di aprire e leggere il file in modo binario:
quindi lo apro:
FILE *F;

char invio_dati[100];

F=fopen("file.gif", "rb");

poi lo leggo:

while(fread (invio_dati, 1, 100, F)!=NULL)
{ ..}

pero credo che qui sbaglio, anche perché quando arriva alla fine del file non esce dal loop.

e nel server la stessa cosa,ma con:

fwrite(ricezione_dati,1,100, F);

Che errori faccio? grazie

71104
23-01-2008, 20:01
non è detto che il valore di ritorno di fread sia 0 quando viene incontrata la fine del file: potrebbe essere il numero di items letti inferiore al previsto. inoltre fread non distingue tra EOF ed errore di I/O, quindi meglio usare feof.

$te
23-01-2008, 21:05
ora pero non riesco a fermare la ricezione!

perché faccio cosi:

client:

while (!feof(F))
{
fread (invio_dati, 1, 100, F);

//Invio il messaggio
send(client,invio_dati,100,0);
printf("\n %s",invio_dati);

}

fclose(F);

send(client,"chiuditi",100,0);

server:

while(1)
{
//Funzione recv per ricevere i dati
recv(server,ricezione_dati,100,0);

if( strcmp(ricezione_dati, "chiuditi")==0) break;

fwrite(ricezione_dati,1,100, F);

//Outputiamo i dati ricevuti
printf("\nHo ricevuto >>> %s \n",ricezione_dati);

//Il ciclo continua finchè non viene digitato "Chiuditi"
}

cionci
24-01-2008, 08:35
Questo è errato:

send(client,"chiuditi",100,0);

Dove li va a prendere i 100 byte da quella stringa ???

$te
24-01-2008, 08:56
quanti byte sono quindi? 1 per lettera?

cionci
24-01-2008, 09:05
Sì, +1 byte per il finestringa.

$te
24-01-2008, 09:33
ok, ora funziona,grazie!

ora vorrei provare ad avviare il server su un computer a casa, e il programma client da un amico: basta mettere l'ip corretto per far funzionare il tutto?

cionci
24-01-2008, 09:37
ora vorrei provare ad avviare il server su un computer a casa, e il programma client da un amico: basta mettere l'ip corretto per far funzionare il tutto?
Se chi fa il server ha la porta aperta sul router (se ce l'ha) e la porta è aperta sul firewall di Windows allora sì.

71104
24-01-2008, 09:37
ora vorrei provare ad avviare il server su un computer a casa, e il programma client da un amico: basta mettere l'ip corretto per far funzionare il tutto? solo se l'amico non è dietro NAT/firewall

edit - mi correggo, solo se tu non sei dietro NAT/firewall. post contemporaneo a quello di cionci :D

$te
24-01-2008, 18:02
un altra curiosità: dovrebbe essere possibile connettersi a dei server (ad es quelli da cui mi connetto con emule?)?