Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    4

    [C] passaggio stringhe client/server

    Ciao! sto facendo un programma client/server per lo scambio di file, come prima cosa volevo far inserire al client il nome utente con il quale identificarsi (attraverso lo stdin), purtroppo dal client non riesco a immettere nessun nome e la read sul server mi mostra che dal socket ritorna parti del testo di indicazione che faccio leggere al client.

    posto il codice
    codice:
    ----SERVER----
    
    void identificazione(int sock){
    	
    	int i=-1;
    	char nome[1024];
    	FILE *fd;
    	
    	char *testo = (char *) malloc( strlen("Inserire Username: ")+1);
    	
    	if(testo==NULL){
    		printf("ERRORE SERVER: testo descrittivo.\n");
    		exit(0);
    	}
    	
    	sprintf(testo, "%s", "Inserire Username: ");
    	
    	/*while*/
    	
    		/*invio le indicazioni alla socket*/
    		write(sock, testo, strlen(testo)+1);
    			
    		read(sock, &nome, sizeof(nome));
    		
    		printf("nome: %s\n", nome);		
    	
    		fd = fopen("Database/lista_utenti.txt", "r");
    		if(fd==NULL){
    			printf("ERRORE: il file non e' stato aperto.\n");
    			exit(0);
    		}
    	
    		if (cerca_utente(fd, nome)<0) printf("nome non trovato\n");
    	
    	
    	/*possibile aggiunta risposta di successo*/
    	
    	fclose(fd);
    }
    codice:
    ----CLIENT-----
    
    void gestione_client(int sock, int r){
    	
    	char *nome=(char *)malloc(1024);
    	char *buffer=(char *)malloc(1024);
    	int ris=1;
    	
    	if(nome==NULL || buffer==NULL){
    		printf("errore client: malloc nome o buffer");
    		exit(0);
    	}
    	
    	memset(nome, 0, sizeof(nome));
    	memset(buffer, 0, sizeof(buffer));
    	
    	/*utente registrato*/
    	if(r==1){
    		
    		read(sock, buffer, sizeof(buffer));
    		printf("%s\n", buffer);
    		
    		while(ris == 1){
    			//printf("siamo nel while del client con la fgets\n");
    			fgets(nome, 1024, stdin);
    			if( nome == NULL )
    				printf("errore o niente\n");
    			else{
    				ris = -1;
    				printf("stringa inserita: %s", buffer);
    			}
    		}
    		
    		write(sock, &nome, sizeof(nome));
    		
    	}
    	/*utente da registrarsi*/
    	else if(r==2) printf("fd\n");
    	
    }
    Penso possa essere un problema nel while(ris==1) qualcosa di concettuale, ma non riesco a trovare un a soluzione.
    Grazie! ciao!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    L'ho letto all'1%, il primo errore che vedo in identificazione():
    read(sock, &nome, sizeof(nome));
    invece di:
    read(sock, nome, sizeof(nome));

    Altro:
    char *testo = malloc.... + check + sprintf
    è allucinante
    perché non hai scritto:
    char *testo = "quello che vuoi";

    Aggiungo nota:
    gli array di char inizializzati così vengono preservati per tutta la durata
    del programma, non c'è bisogno di allocarli sull'heap.

    Vedi per esempio questo che è perfettamente valido:
    codice:
    char *mio_testo() {
        return "mio testo";
    }

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.