Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26
  1. #11
    Originariamente inviato da ktm84
    Io credo che il problema sia nel modo in cui leggo i dati dal file e li invio al client..e come il client legge i dati ricevuti e li scrive nel file..ma nn so cm risolvere
    Il codice del client non lo conosciamo quindi non possiamo aiutarti. Hai provato a forzare l'apertura in binario come ti ho già suggerito?

  2. #12
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    adesso posto il codice del client!
    #include "basic.h"

    void client_func(int sockfd, FILE *in);

    int main(int argc, char **argv) {
    int sockfd, n;
    struct sockaddr_in servaddr;

    if (argc != 3)
    { printf("usage: echocli <IPaddress> <PORT>\n"); exit(1); }

    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    { printf("socket error\n"); exit(1); }

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(atoi(argv[2])); /* echo server port */
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
    { printf("inet_pton error for %s", argv[1]); exit(1);}

    if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
    { printf("connect error\n"); exit(1);}

    client_func(sockfd, stdin); /* svolge tutto il lavoro del client */
    exit(0);
    }


    void client_func(int sockfd, FILE *in) {
    char sendline[MAXLINE], recvline[MAXLINE], nomefile[MAXLINE], ctrl[5];
    FILE *fp;
    int n;
    int i, j;
    char buffer[1];

    //invio nome file
    while(fgets(sendline, MAXLINE, in)!=NULL){
    reti_writen(sockfd, sendline, strlen(sendline));
    printf("Inviato nome file\n");

    //controllo la linea di controllo inviata dal server
    if ((n=reti_readline(sockfd, ctrl, sizeof(char)*5)) == 0)
    { printf("%s: server terminated prematurely",__FILE__); exit(1); }
    i=atoi(ctrl);
    printf("%d\n", i);
    if(i==-1)
    printf("Errore: file non esistente\n");
    else{
    //creo file per la ricezione
    for(j=0; sendline[j]!='\n'; j++)
    ;
    sendline[j]='\0';
    sprintf(nomefile, "%s2.jpg", sendline);
    if((fp=fopen(nomefile, "w"))==NULL)
    printf("Errore open\n");

    //bzero(buffer, 1);
    while (i>0)
    {
    bzero(buffer, 1);
    reti_readline(sockfd,buffer,sizeof(buffer));
    fputs(buffer,fp);
    fflush(fp);
    i--;
    }

    fclose(fp);
    printf("Fine copia file\n");
    }
    }
    }


    per quanto riguarda sprintf nel server i non è un int ma la dichiarazione è char i[5]

  3. #13
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    dopo avervi ringraziato per la vostra disponibilità..
    ne approfitto per fare anche un'altra domanda in attesa di risolvere il problema principale..
    per conoscere la dimensione di un file so che si può fare anche cn stat..o fstat..ma nn so come precisamente!!
    sapreste aiutarmi??

  4. #14
    Originariamente inviato da ktm84
    per quanto riguarda sprintf nel server i non è un int ma la dichiarazione è char i[5]
    Hai ragione scusa, però dai, per definizione i è int! Verifica comunque che 4 caratteri siano sufficienti...

    Ti chiedo di nuovo, visto che non hai dato riscontro, se hai provato a forzare la lettura (e di conseguenza la scrittura) del file JPG in binario.

  5. #15
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    si scusa ovviamente una domanda dovevo lasciarla in sospeso
    cmq si l'ho fatto sia in lettura che in scrittura

    è vero i in genere è un intero..ma personalmente è anche la prima variabile che mi passa per la testa

  6. #16
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    è possibile che l'errore sia nel while dove leggo i dati dal file??

  7. #17
    Originariamente inviato da ktm84
    è possibile che l'errore sia nel while dove leggo i dati dal file??
    Scusa, ma nei cicli di invio e ricezione non mi sembra tu stia gestendo un byte alla volta, dico bene?

    codice:
    while (size>0)
    {
     fgets(buffer,MAXLINE,fp);
     reti_writen(sockfd,buffer,sizeof(buffer));
     size--;
    }
    E quindi perchè size--?
    Inoltre devi controllare il valore di ritorno di questa "reti_writen" (che non so cosa faccia, ma lo posso intuire) perchè se c'è stato un errore...

  8. #18
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    mando un byte per volta maxline vale 1 quindi decremento di uno size
    reti_writen manda al client n byte letti..in questo caso n è 1

  9. #19
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    15
    potreste darmi eventualmente una soluzione diversa??conosco la dim del file..adesso devo leggere ed inviare tutto al client!!

  10. #20
    Originariamente inviato da ktm84
    mando un byte per volta maxline vale 1 quindi decremento di uno size
    reti_writen manda al client n byte letti..in questo caso n è 1
    Vale 1??? Ma allora la fgets non legge nulla! E poi usi MAXLINE anche per altri array quindi c'è qualcosa che non torna! E a prescindere da quello devi comunque controllare l'eventuale errore della reti_writen.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.