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:
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));
}
}
Analogamente, la funzione del client è questa:
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);
}
}
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.