Gdy chcę ustanowić port dla wysłania danych na serwer dostaję błąd przy próbie połączenia. Scenariusz jest taki, że najpierw sprawdzam na jakim porcie i adresie serwer nasłuchuje a potem się do niego łączę. Fragmenty tej metody:
int Cftp::OpenDataPort(int)
{
/*
sprawdzenie flagi połączenia i argumentów
*/
if(!SendCmd("PASV",'2'))//pobieramy informację o wolnym adresie i porcie dla transmisji danych
{
for(int i=0;i<strlen(ftpHandle->cResponse);i++){cout<<ftpHandle->cResponse[i];}
return 0;
}
/*
trochę magii by przygotować łańcuchy znakowe
*/
int nDataPort=atoi(strDataPort.c_str());
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_port=htons(nDataPort);
sin.sin_addr.s_addr = inet_addr(strDataHost.c_str());
sockfd=socket(PF_INET, SOCK_STREAM,0);
if(connect(sockfd, (struct sockaddr *)&sin, sizeof(struct sockaddr)) < 0){
perror("connect");
return 0;}
return 1;
}
Dostaję cały czas błąd dla connect(). Przy ustanawianiu portu dla odbioru (funckje bind(), listen() i komenda PORT) nie dostaję żadnych błędów.
A może coś źle robię? A może wystarczy jak tylko ustanowię port danych po mojej stronie (klient) a potem tylko STOR i będzie działać?