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):
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));
}
Lato client invece ho questo:
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);
}
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.
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?