Salve a tutti, ho ancora a che fare con client e server in C.
L'esercizio prevede l'invio di alcuni comandi al server [MAIL TO, MAIL FROM, DATA, BYE], simulando un server smtp.
Questo è il codice del server (solo la parte relativa alla ricezione di questi comandi):
Lato client invece ho questo:codice:for ( ; ; ) { reti_readline(sockfd, line, MAXLINE); // Leggo dal client // Ricevo il mittente if(sscanf(line, "MAIL FROM: %s", mittente)){ printf("%s", mittOK); reti_writen(sockfd, mittOK, strlen(mittOK)); reti_readline(sockfd, line, MAXLINE); // Leggo dal client } // Ricevo il destinatario if(sscanf(line, "MAIL TO: %s", destinatario)){ printf("%s", destOK); reti_writen(sockfd, destOK, strlen(destOK)); reti_readline(sockfd, line, MAXLINE); // Leggo dal client } // Ricevo DATA (sono pronto a ricevere i dati) if(strcmp(line, "DATA")==0){ printf("%s", dataReady); reti_writen(sockfd, dataReady, strlen(dataReady)); reti_readline(sockfd, line, MAXLINE); // Leggo i dati } // Ricevo BYE e chiudo la connessione if(strcmp(line, "BYE")==0) return; reti_writen(sockfd, error, strlen(error)); }
N.B. I codici di base del server e del client sono forniti dal professore ; reti_readline legge fino a \n ; mittOK, destOK, dataReady e dataOK sono stringhe standard che il server usa per rispondere.codice:char sendline[MAXLINE], recvline[MAXLINE]; // Leggo la stringa di benvenuto if (reti_readline(sockfd, recvline, MAXLINE) == 0) { printf("%s: server terminated prematurely",__FILE__); exit(1); } fputs(recvline, stdout); while (fgets(sendline, MAXLINE, fp) != NULL) { reti_writen(sockfd, sendline, strlen(sendline)); if (reti_readline(sockfd, recvline, MAXLINE) == 0) { printf("%s: server terminated prematurely",__FILE__); exit(1); } fputs(recvline, stdout); }
Quando lo eseguo e invio in ordine MAIL FROM, MAIL TO ecc.., il server risponde e quindi sembra funzionare. Dopo DATA dovrei inviare il testo della mail. Ho provato ad inviare una frase (devo ancora implementare l'invio di righe multiple) ma mi ha dato errore, sul client, con la scritta "server terminated prematurely". Da errore anche se provo a inviare per primo un comando che non sia MAIL FROM.
Qualche suggerimento?![]()


Rispondi quotando