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

    ese programmazione di rete

    ciao a tutti, ho buttato giù l'esercizio però non so se è giusto, qualcuno potrebbe darmi qualche suggerimento? grazie mille!

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    
    #define PORT 4000
    #define IP "127.0.0.1"
    
    
    
    int main(){
    
    struct sockaddr_in server_addr;
    int server_addr_len=sizeof(server_addr);
    
    int PORT1=PORT; 
    
    char STRINGA[30];
    
    char NUM[11]; //stringa per memorizzare il numero di tentativi
    
    int sd,i,err,tentativi=0;
    
    //init addr
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons((u_short)PORT1);
    server_addr.sin_addr.s_addr=inet_addr(IP);
    //end init
    
    sd=socket(AF_INET,SOCK_STREAM,0);
    
    err=connect(sd,(struct sockaddr*)&server_addr,server_addr_len);
    
    if(err<0){ 
    
    		printf("errore: connessione\n"); 
    
    		return 1;
    	}
    
    else printf("connessione riuscita"); // qui deve arrivarci perchè il port me lo da il testo
    
    	
    
    while(PORT1!=-1){ // parte il ciclo while
    
    i=0;
    
    do{
    
    	err=recv(sd,&STRINGA[i],1,0);
    
    	if (err<0) { printf("errore in recv: errore ricezione: err<0\n"); 
    
    			return 1; 
    			}
    
    	if (err==0) { printf("errore in recv: chiusura connessione: err==0\n"); 
    
    			return 1; 
    			}
    
    	i++;
    
    	}while(STRINGA[i-1]!='\n');
    
    printf("stringa ricevuta\n");
    
    PORT1=atoi(STRINGA); //aggiorno il port
    
    printf("stringa convertita\n");
    
    if (PORT1==-1) { 
    
    		printf("stringa convertita: PORT == -1\n");
    
    		break; 
    
    		}
    
    
    printf("stringa convertita\n");
    
    printf("cambio il port e tento la connessione...\n");
    
    //init addr
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons((u_short)PORT1);
    server_addr.sin_addr.s_addr=inet_addr(IP);
    //end init
    
    err=connect(sd,(struct sockaddr*)&server_addr,server_addr_len);
    
    if(err<0){ 
    
    		printf("errore: connessione\n"); 
    
    		tentativi++;
    
    		break;
    
    	}
    
    else { 
    
    	printf("connessione riuscita");
    
    	break;
    
    	}
    
    	
    
    }//fine ciclo while		
    
    
    printf("ciclo completato invio il numero di tentativi...\n");
    
    sprintf(NUM,"%d\n",tentativi);
    
    err=send(sd,NUM,strlen(NUM),0);
    
    if (err<0) { printf("errore in send: err<0\n"); 
    
    			return 1; 
    			}
    else printf("numero tentativi inviati...termino\n\n");
    
    close(sd);
    
    return 1;
    
    
    }
    l'ho compilato e non dovrebbero esserci errori di sintassi, il problema è la semantica.

    grazie ciao

  2. #2

    correzione

    scusate ma non sono pratico di blog, questa è la mia bozza di soluzione ad un problema che avevo scritto in un messaggio precedente che era:

    Ciao a tutti, devo fare un esercizio importantissimo di programmazione di rete sotto linux,in C; perfavore aiutatemi, l'ese è il seguente:

    sono un client CL che gestisce diversi canali CLX, nel seguente modo, con un server:

    il server risponde all'indirizzo IP "xxx,x,x,x"//l'ip dipende dal testo dl problema
    ed PORT 4000 //il primo port dipende dal testo dell'esercizio, 4000 è solo un sempio


    il client si connette al server

    2) riceve da questo una sequenza di caratteri numerici terminata da \n

    qesta sequenza convertita in numero è un nuovo PORT;

    il client prova a connettersi a questo port:

    A) se ci riesce il canale di comunicazione diventa questo ed il ciclo ricomincia dal punto 2

    B) se non ci riesce il canale di comunicazione resta quello precedente, ed il ciclo riparte dal punto 2

    il ciclo termina quendo il PORT ricevuto è = -1

    terminato il ciclo il client spedisce sull'ultimo canale al server il numero di tentativi di connessione fallita,

    il client termina



    Questa traccia dovrebbe essere ben aderente;

    GRAZIE MILLE

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Alcune considerazioni:

    1) Questo è un forum, non un blog
    2) Il codice va postato all'interno degli appositi tag previsti dal forum (tag CODE), ben indentato e possibilmente commentato
    3) Il linguaggio va obbligatoriamente indicato nel titolo della discussione
    4) La richiesta dovrebbe essere il più precisa possibile: se il tuo codice non funziona spiega cosa non funziona (cosa ottieni e cosa vorresti, invece, ottenere)... non puoi delegare il compito a chi ti aiuta.
    5) Il regolamento, link in rilievo in ciascuna sezione, va sempre letto prima di postare.


    Cerco di accomodare il titolo e il post (aggiungendo i tag)

    Tu, intanto, cerca di fornire ulteriori informazioni su quali problemi riscontri.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Innanzi tutto, grazie per la comprensione; il codice è scritto in linguaggio C ed è compilato sotto Linux;
    è tutto il pomeriggio che ci ragiono il problema è che questo tipo di esercizi per sapere se sono veramente funzionanti ho si è davvero bravi(ed io non lo sono ) oppure bisogna avere il server ma io non ce l'ho perchè è a scuola ed non so implementarlo;
    comunque per me sarebbe già abbastanza sapere se la semantica è giusta.
    Per questo ho alcune domande: se io ho il socket (sd nell'esempio) occupato con un server, e voglio tentare la connessione su di un altro server, posso usare lo stesso socket ,cambiando solo il port?
    cioè il socket precedente viene sovrascritto o non si può fare?

    grazie ciao

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.