PDA

Visualizza la versione completa : [C] esercizio programmazione di rete


jhon.denver
12-12-2008, 15:23
ciao a tutti, ho buttato gi l'esercizio per non so se giusto, qualcuno potrebbe darmi qualche suggerimento? grazie mille!



#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

jhon.denver
12-12-2008, 15:25
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

LeleFT
12-12-2008, 15:59
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. :ciauz:

jhon.denver
12-12-2008, 17:12
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 :cry: ) 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 :ciauz:

Loading