Salve a tutti.
Sto provando a realizzare un client-server echo in C. Echo nel senso che il server risponde con la stessa cosa che gli invia il client. E fin qui, nessun problema. Nel momento in cui provo a modificarlo per far sì che il server, anzichè rispondere con lo stesso messaggio, risponda con un messaggio standard, del tipo "Messaggio ricevuto.", non riesco più a farlo funzionare. Dove sbaglio?
In breve, la funzione del server in cui ricevo la stringa e rispondo con un messaggio standard è questa:
Analogamente, la funzione del client è questa:codice:void server_echo(int sockfd){ ssize_t n; char line[MAXLINE]; char ack[] = "Message Received"; for( ; ; ){ if( (n = reti_readline(sockfd, line, MAXLINE)) == 0) return; // Connessione chiusa dal client // Se inserisco line ed n al posto di ack e strlen(ack) funziona tutto correttamente reti_writen(sockfd, ack, strlen(ack)); } }
La funzione reti_readline prende in input un socket descriptor e un vettore di caratteri di lunghezza MAXLINE (256). Termina quando incontra \n. La funzione reti_writen scrive n byte sul descrittore.codice:void client_echo(FILE *fp, int sockfd){ char sendline[MAXLINE], recvline[MAXLINE]; 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); } }


Rispondi quotando