ciao a tutti, ho buttato giù l'esercizio però non so se è giusto, qualcuno potrebbe darmi qualche suggerimento? grazie mille!
l'ho compilato e non dovrebbero esserci errori di sintassi, il problema è la semantica.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; }
grazie ciao

Rispondi quotando

il codice è scritto in linguaggio C ed è compilato sotto Linux;
) oppure bisogna avere il server ma io non ce l'ho perchè è a scuola ed non so implementarlo;