[wxWidgets] Problem z pobieraniem pliku przez FTP

0
   wxFTP ftp;
   
   ftp.SetTransferMode(wxFTP::ASCII);
   ftp.SetUser("anonymous");
   ftp.SetPassword("[email protected]");
    
    if ( !ftp.Connect(wxT("192.168.1.4")) )  {
        wxLogError(wxT("Nie mogę połączyć się z serwerem"));
        return;
    };

    ftp.Pwd();
    ftp.ChDir("/"); 
    wxInputStream *in = ftp.GetInputStream(wxT("version.txt"));
    if (!in) {
        wxLogError(wxT("Nie mogę pobrać aktualizacji"));
    } else {
	    //in->GetSize() daje mi 0
		//ftp.GetFileSize(wxT("version.txt")), daje -1
        wxMessageBox(wxString::Format("Rozmiar w strumieniu %i %i",in->GetSize(),ftp.GetFileSize(wxT("version.txt")) ));
        size_t size = in->GetSize();
        char *data = new char[size];
        if (!in->Read(data, size)) {
            wxLogError(wxT("Błąd odczytu ze strumienia"));
        } else {

Do serwera się łączę, ale otrzymuję:

Błąd odczytu ze strumienia

Failed to set FTP transfer mode to ASCII.
The FTP server doesen't support passive mode.

Natomiast nie mam problemów aby pobać ten plik przy pomocy klienta FileZilla

--- log z serwera po połączeniu do niego z klienta FileZilla

(000058) 2010-05-22 1715 - (not logged in) (192.168.1.4)> Connected, sending welcome message...
(000058) 2010-05-22 1715 - (not logged in) (192.168.1.4)> 220 Prywatny serwer FTP
(000058) 2010-05-22 1715 - (not logged in) (192.168.1.4)> USER anonymous
(000058) 2010-05-22 1715 - (not logged in) (192.168.1.4)> 331 Password required for anonymous
(000058) 2010-05-22 1715 - (not logged in) (192.168.1.4)> PASS **************
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 230 Logged on
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> CWD /
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 250 CWD successful. "/" is current directory.
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> PWD
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 257 "/" is current directory.
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> TYPE A
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 200 Type set to A
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> PASV
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 227 Entering Passive Mode (192,168,1,4,9,108)
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> RETR version.txt
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 150 Connection accepted
(000058) 2010-05-22 1715 - anonymous (192.168.1.4)> 226 Transfer OK
(000057) 2010-05-22 1719 - anonymous (192.168.1.4)> disconnected.

--- log z serwera po połączeniu do niego z mojego programu

(000052) 2010-05-22 1736 - (not logged in) (192.168.1.4)> Connected, sending welcome message...
(000052) 2010-05-22 1736 - (not logged in) (192.168.1.4)> 220 Prywatny serwer FTP
(000052) 2010-05-22 1736 - (not logged in) (192.168.1.4)> USER anonymous
(000052) 2010-05-22 1736 - (not logged in) (192.168.1.4)> 331 Password required for anonymous
(000052) 2010-05-22 1736 - (not logged in) (192.168.1.4)> PASS ************************
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 230 Logged on
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> PWD
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 257 "/" is current directory.
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> CWD /
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 250 CWD successful. "/" is current directory.
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> TYPE I
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 200 Type set to I
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> PASV
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 227 Entering Passive Mode (192,168,1,4,9,78)
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> RETR version.txt
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 150 Connection accepted
(000052) 2010-05-22 1736 - anonymous (192.168.1.4)> 226 Transfer OK
(000052) 2010-05-22 1738 - anonymous (192.168.1.4)> ABOR
(000052) 2010-05-22 1738 - anonymous (192.168.1.4)> 226 ABOR command successful
(000052) 2010-05-22 1738 - anonymous (192.168.1.4)> QUIT
(000052) 2010-05-22 1738 - anonymous (192.168.1.4)> 221 Goodbye
(000052) 2010-05-22 1738 - anonymous (192.168.1.4)> disconnected.

0
ftp.SetPassive(false) 
0

Ale serwer obsługuje tryb pasywny (Filezilla nie ma problemu), zresztą kiedy wyłączam tryb pasywny to otrzymuję kolejne błędy:

The FTP server doesn't support the PORT command.

0

wydaje mi się, że problemem jest jakiś bug w bibliotece wxwidgets
bedę musiał ściągnąć źródła filezilla i przejrzeć, o ile dobrze pamiętam używa wxWidgets, ale chyba nie korzysta z wxFTP

0

A próbowałeś z innym trybem transferu?

0

Tak, ASCII, BINARY

Jakaś całkowita kaszana,
przy ustawionym trybie pasywnym otrzymuję info u siebie w programie, że serwer nie obsługuje trybu pasywnego - a obsługuje, widzę to dokładnie w oknie logu serwera.

Jak wyłączę tryb pasywny otrzymuje błąd komendy POST, a serwer mówi, że komend wykonała sie poprawnie.

wyłączony tryb pasywny

(000080) 2010-05-22 2043 - (not logged in) (192.168.1.4)> Connected, sending welcome message...
(000080) 2010-05-22 2043 - (not logged in) (192.168.1.4)> 220 Prywatny serwer FTP
(000080) 2010-05-22 2043 - (not logged in) (192.168.1.4)> USER anonymous
(000080) 2010-05-22 2043 - (not logged in) (192.168.1.4)> 331 Password required for anonymous
(000080) 2010-05-22 2043 - (not logged in) (192.168.1.4)> PASS ************************
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 230 Logged on
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> PWD
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 257 "/" is current directory.
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> CWD /
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 250 CWD successful. "/" is current directory.
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> TYPE I
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 200 Type set to I
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> PORT 192,168,1,4,15,49
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 200 Port command successful
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> RETR version.txt
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 150 Opening data channel for file transfer.
(000080) 2010-05-22 2043 - anonymous (192.168.1.4)> 226 Transfer OK
(000080) 2010-05-22 2044 - anonymous (192.168.1.4)> ABOR
(000080) 2010-05-22 2044 - anonymous (192.168.1.4)> 226 ABOR command successful
(000080) 2010-05-22 2044 - anonymous (192.168.1.4)> QUIT
(000080) 2010-05-22 2044 - anonymous (192.168.1.4)> 221 Goodbye
(000080) 2010-05-22 2044 - anonymous (192.168.1.4)> disconnected.

przy włączonym

(000081) 2010-05-22 2154 - (not logged in) (192.168.1.4)> Connected, sending welcome message...
(000081) 2010-05-22 2154 - (not logged in) (192.168.1.4)> 220 Prywatny serwer FTP
(000081) 2010-05-22 2154 - (not logged in) (192.168.1.4)> USER anonymous
(000081) 2010-05-22 2154 - (not logged in) (192.168.1.4)> 331 Password required for anonymous
(000081) 2010-05-22 2154 - (not logged in) (192.168.1.4)> PASS ************************
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 230 Logged on
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> PWD
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 257 "/" is current directory.
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> CWD /
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 250 CWD successful. "/" is current directory.
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> TYPE I
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 200 Type set to I
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> PASV
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 227 Entering Passive Mode (192,168,1,4,15,71)
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> RETR version.txt
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 150 Connection accepted
(000081) 2010-05-22 2154 - anonymous (192.168.1.4)> 226 Transfer OK
(000081) 2010-05-22 2155 - anonymous (192.168.1.4)> ABOR
(000081) 2010-05-22 2155 - anonymous (192.168.1.4)> 226 ABOR command successful
(000081) 2010-05-22 2155 - anonymous (192.168.1.4)> QUIT
(000081) 2010-05-22 2155 - anonymous (192.168.1.4)> 221 Goodbye
(000081) 2010-05-22 2155 - anonymous (192.168.1.4)> disconnected.

0

Przy ustawianiu trybów otrzymuję:

Failed to set FTP transfer mode to <tryb>

0

Tryb ustawiaj po połączeniu, a nie przed. Zresztą nic nie musisz ustawiać, bo domyślnym trybem jest tryb binarny. Sprawdzałem na koncie z nazwa.pl i wszystko działa jak należy (wersja 2.8.10).

0

mam tą samą wersję,
a czy mógłbyś wrzucić kawałek Twojego kodu odpowiedzialnego za połączenie, może coś mam nie po kolei?

na marginesie, nie znacie jakiejś prostej klasy pod c++ do obsługi ftp?
taki prościuchny, ale sprawdzony klient... znalazłem tego sporo w sieci, ale który jest jest stabilny, to dopiero musiał bym eksperymentować

0

Kodu Ci nie wrzucę, bo to właściwie to samo co u Ciebie, tylko inny adres, hasło.

0

znalazłem coś takiego
http://www.codeproject.com/KB/IP/ftpclientclass.aspx
demo działa bez zarzutu, będę musiał to przewalić do mojego kodu

0

porażka totalna :-[

kurna, miałem tylko jedną linię w pliku, po której nie dałem \r\n

1 użytkowników online, w tym zalogowanych: 0, gości: 1