Progeny ha scritto:Il problema non sarebbe aprire un socket in listening, ma già sto usando un socket, poi ad aprirne un'altro sarebbe un mezzo casino, perchè da una settimana che ho imparato ad usare i socket alla meglio
poi dovrei fare 2 controlli sui dati che ricevo, uff, insomma non ho propio voglia di compicarmi la vita 👍
grazie x l'url, bye
e' piu semplice di quello che pensi
PORT MODE:
Client: "PORT a1,a2,a3,a4,p1,p2"
dove a1,a2,a3,a4 sono i byte che rappresentano il tuo ip in notazione puntata mentre p1 e p2 non son altro che il most-significant byte e il less-significant byte della porta. La porta su cui ascoltare la ricavi banalmente con una bind(0), di conseguenza p1=port/256 e p2=port%256.
Il server riceve la request e, al primo comando che involve un trasferimento dati (NLST, LIST, RETR, STOR, STOU o APPE) aprira una connessione all'host:port che tu stesso hai specificato.
PASV MODE:
Client: "PASV"
Server: "227 Entering passive mode (a1,a2,a3,a4,p1,p2)"
In questo caso ancora piu semplice:
unsigned int a1,a2,a3,a4,p1,p2;
char *ptr=strchr(ServerReply,'(');
if (sscanf(ptr,"(%u,%u,%u,%u,%u,%u)",&a1,&a2,&a3,&a4, &p1,&p2) != 6)
{
/* Error parsing reply */
}
a1..a4 contiene, come facilemnte intuibile, gli ottetti dlel'ip cui connettere la socket dati, e la porta e' ricavabile con port=p1*256+p2;
Sorry per essermi dilungato
F.