Ciao a tutti.
Sto scrivendo un programma in C che mi permetta di comunicare con un server POP3 con il fine di ottenere il numero di E-mail presenti su quest'ultimo. Visto che sono alle prime armi mi sono limitato a testare per lo meno la gestione dei messaggi con il server POP3 in particolare cerco di autenticarmi con i comandi "user ..." e "pass ...".
Il problema è che quando invio il comando "user <mio nome utente>" il server mi restituisce la stringa "-ERR Protocol error."
Vi posto il codice:
La parte che sicuramente necessita di qualche correzione è la segiente:codice:#include <sys/types.h> /* predefined types */ #include <unistd.h> /* include unix standard library */ #include <arpa/inet.h> /* IP addresses conversion utilites */ #include <sys/socket.h> /* socket library */ #include <stdio.h> /* include standard I/O library */ #include <string.h> #include <stdlib.h> #include <errno.h> void ComPop3(FILE * filein, int socket); /* Variables and costants definition */ #define MAXLINE 256 int sock_fd, i; struct sockaddr_in serv_add; /* Main program begin */ int main(int argc, char *argv[]) { /* create socket */ if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("Socket creation error"); return 1; } /* initialize address */ memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */ serv_add.sin_family = AF_INET; /* address type is INET */ serv_add.sin_port = htons(110); /* 110 da pop3 protocol */ /* build address using inet_pton */ if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) { /* ottengo l'indirizzo del server, che viene fornito come argomento */ perror("Address creation error"); /* Il server deve essere in formato dotted decimal */ return 1; } /* extablish connection */ if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) { perror("Connection error"); return 1; } /* avvia funzione di comunicazione con il server */ ComPop3(stdin, sock_fd); return 0; } /* funzione di comunicazione con il server */ void ComPop3(FILE * filein, int socket) { /* Local variables definition */ char sendbuff[MAXLINE+1], recvbuff[MAXLINE+1]; int nread,nwrite; nread = read(socket, recvbuff, sizeof(recvbuff)); //sizeof: per leggere fino alla fine recvbuff[nread] = 0; fputs(recvbuff, stdout); fgets(sendbuff, MAXLINE, filein); nwrite= send(socket, sendbuff, strlen(sendbuff), 0); if (nwrite < 0) { fputs("errore nella trasmissione\n", stdout); } if (nwrite == 0) { fputs("messaggio vuoto\n", stdout); } if (nwrite > 0) { fputs("inviato messaggio\n", stdout); } nread= recv(socket, recvbuff, sizeof(recvbuff), 0); recvbuff[nread] = 0; fputs(recvbuff, stdout); }
Sapete dirmi cosa sbaglio? Ho letto sulle specifiche del protocollo POP3 che ogni comunicazione da client a server deve terminare con \n\r, ma come faccio a inserirlo?codice:/* funzione di comunicazione con il server */ void ComPop3(FILE * filein, int socket) { /* Local variables definition */ char sendbuff[MAXLINE+1], recvbuff[MAXLINE+1]; int nread,nwrite; nread = read(socket, recvbuff, sizeof(recvbuff)); //sizeof: per leggere fino alla fine recvbuff[nread] = 0; fputs(recvbuff, stdout); fgets(sendbuff, MAXLINE, filein); nwrite= send(socket, sendbuff, strlen(sendbuff), 0); if (nwrite < 0) { fputs("errore nella trasmissione\n", stdout); } if (nwrite == 0) { fputs("messaggio vuoto\n", stdout); } if (nwrite > 0) { fputs("inviato messaggio\n", stdout); } nread= recv(socket, recvbuff, sizeof(recvbuff), 0); recvbuff[nread] = 0; fputs(recvbuff, stdout); }

Rispondi quotando