Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinINet] Tworzenie pliku na serwerze FTP

Ostatnio zmodyfikowano 2015-08-21 13:10
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[WinINet] Tworzenie pliku na serwerze FTP
» 2015-08-20 23:10:46
Co jest nie tak w poniższym fragmencie?
C/C++
while( 1 )
{
    HINTERNET hVisterFTP = InternetOpen( vister.userAgent,
    INTERNET_OPEN_TYPE_DIRECT,
    NULL,
    NULL,
    0
    );
   
    hVisterFTP = InternetConnect( hVisterFTP,
    vister.name,
    INTERNET_DEFAULT_FTP_PORT,
    vister.login,
    vister.password,
    INTERNET_SERVICE_FTP,
    0,
    0
    );
   
   
    HINTERNET hFtpFile = FtpOpenFile( hVisterFTP, nazwa(), GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0 );
   
    InternetCloseHandle( hFtpFile );
    InternetCloseHandle( hVisterFTP );
   
    Sleep( 4000 );
}

Funkcja
nazwa()
 zwraca kolejno "test1", "test2", itd. Z założenia na serwerze FTP ma się pojawiać nowy plik co 4 sekundy. Natomiast program tworzy tylko jeden o nazwie "test1". Zakładam że
HINTERNET hVisterFTP
 jest poprawny ponieważ inne funkcje jak np FtpPutFile działają poprawnie po przekazaniu im tego uchwytu.
P-136619
DejaVu
» 2015-08-21 09:22:10
Może nie zamykasz połączenia z FTP, a FTP ma limit 1 połączenia na raz.

/edit:
Poza tym Twój kod jest co najmniej dziwny, zważywszy na fakt, że dwukrotnie przypisujesz wartość do zmiennej hVisterFTP.
P-136634
Vister26
Temat założony przez niniejszego użytkownika
» 2015-08-21 13:10:22
Problem był z funkcją
nazwa()
, którą tutaj uprościłem. We właściwym kodzie, jako jeden z argumentów, przyjmowała wskaźnik na tablicę i przekraczała jej rozmiar, dodatkowo tworząc niedozwolone znaki. Działo się to zawsze za drugim wywołaniem tej funkcji więc plik był tworzony na serwerze tylko raz. Przy okazji niejako sam rozwiązał się problem z "segmentation fault", którego nie mogłem zlokalizować ;)

Co do połączenia FTP to zamykam je przecież za każdym razem przez InternetCloseHandle.

After the calling application has finished using the HINTERNET handle returned by InternetOpen, it must be closed using the InternetCloseHandle function.
Tego nie doczytałem i sądziłem że wystarczy zamknąć uchwyt zwracany przez InternetConnect, szczególnie że do tej pory tym sposobem wszystko działało bezbłędnie. Niemniej poprawię to dla pewności.
P-136641
« 1 »
  Strona 1 z 1