ftp download

R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

Witam!
Prosty kod (na podstawie msdn):

Kopiuj
int main()
{
    HINTERNET INT = InternetOpen("client", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC);
    check(INT);
    HINTERNET FTP = InternetConnect(INT, HOST_FTP, INTERNET_DEFAULT_FTP_PORT, LOGIN_FTP, PASSWORD_FTP, INTERNET_SERVICE_FTP, 0, 0);
    check(FTP);
    bool good = FtpGetFile(FTP, "test.txt", "test.txt", false, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);
    check(good);
    return 0;
}

check() to po prostu moja funkcja informująca o ewentualnym błędzie, kodzie błędu i zamykająca program w razie czego.
Problem w tym, że FtpGetFile() wywala błąd o kodzie 12031 - "The connection with the server has been reset."
Średnio mi to coś mówi, w każdym razie, jeżeli plik usunąłem z ftp kod błędu był taki sam. Czy jakoś nie tak odwołuję się do tego pliku? Na ftp wrzuciłem go bezpośrednio, bez żadnych folderów. Nie wiem co jest nie tak.


R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

Nikt nie pomoże? :(
Ludzie, bo ja już osiągnąłem wyżyny frustracji i żyję w skrajnej nerwicy :/
No nie mogę tego samodzielnie rozkminić...
Już mi przychodzą myśli, że może po stronie serwera jest coś nie tak? Ale to raczej niemożliwe, jak się łączę managerem ftp, wszystko jest ok.
Może nie taka konfiguracja połączenia jest? (źle ustawione flagi itp?). Ale jak przeglądałem różne kody źródłowe to właśnie w ten sposób jest to wszędzie zrealizowane. Dodawanie różnych slash'y do ścieżek plików też nic nie daje. Jakiekolwiek firewall-e / antywirusy wyłączone.
Nie mam już żadnych pomysłów, wszystko wydaje się dobrze zrobione...


edytowany 3x, ostatnio: radoslav006
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Sprawdź czy możesz łączyć się zewnętrznie z FTP, wiele hostingów na to nie pozwala.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

Konto ftp założyłem na cba.pl i przy łączeniu się przez program zewnętrzny (FileZilla) nie było żadnych problemów.


R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

Hmm, a możecie polecić jakieś inne biblioteki do obsługi ftp??
Tym sposobem się chyba poddaję.


OT
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 11 lat
0

curl

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Wywal flagę INTERNET_FLAG_ASYNC.

R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

A co jeśli chodzi o winsock? Kiedyś pisałem prostacki komunikator między dwoma komputerami, da się tym obsłużyć ftp??

@_0x666_
Od razu się rzuciłem na kompilator ;P Niestety...
Hmm, z tego co jest napisane na msdn, to są dostępne trzy flagi w tamto miejsce:
INTERNET_FLAG_ASYNC
INTERNET_FLAG_FROM_CACHE
INTERNET_FLAG_OFFLINE
Z czego dwie ostatnie "does not make network requests".
Oczywiście, próbowałem empirycznie kombinować ;P Ale też nie wychodzi... A w ogóle co dziwne INTERNET_FLAG_FROM_CACHE wywala mi błąd kompilacji.
W każdym razie nie chce działać nadal :/

@othello @xeo545x39
Dzięki, może jakoś w tym mi wyjdzie...


edytowany 1x, ostatnio: radoslav006
06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0
Kopiuj
HINTERNET hInt = InternetOpen("client", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if(hInt)
{
	HINTERNET hFTP = InternetConnect(hInt, "biolpc22.york.ac.uk", INTERNET_DEFAULT_FTP_PORT, "", "", INTERNET_SERVICE_FTP, 0, 0);

	FtpGetFile(hFTP, "/pub/1.68B/readme.txt", "test.txt", false, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);

	InternetCloseHandle(hFTP);
	InternetCloseHandle(hInt);
}

Tu masz przykład kodu, który ściąga plik z publicznego serwera FTP wxWidgets. NIe byłem w stanie przetestować tego na koncie cba.pl, ale radykalnych zmian w kodzie nie powinno być.

p.s. nie pisz dużymi literami nazw zmiennych. Taki INT jest już zdefiniowany w windows.h.

edytowany 1x, ostatnio: _0x666_
OT
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 11 lat
0

A co jeśli chodzi o winsock? Kiedyś pisałem prostacki komunikator między dwoma komputerami, da się tym obsłużyć ftp??

A czemu ma sie nie dac? Ftp to przecież tylko protokół tcp. Specyfikacja ftp do ręki i jedziesz. Napiszesz sobie od zera bibliotekę do obsługi ftp.

R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

@_0x666_
No tak, z tym INT-em rozumiem. Hmm, jak działa Ci ten kod to już nic nie rozumiem - u mnie nie paca. Na komputerze kolegi z pokoju też odpalałem i ten sam błąd wyrzuca... Czyli dla mnie tak to wygląda jakby wina była po stronie sieci? Nie wiem, nie znam się. Ale skoro Tobie działa, u mnie nie działa, u niego nie działa to wyklucza raczej błędy jakieś systemowe (no musielibyśmy je mieć obydwaj), ale z kolei do tej samej sieci jesteśmy podłączeni, więc może tutaj tkwi problem? Spróbuję to jeszcze odpalić w zupełnie innym miejscu... po prostu z braku lepszych pomysłów ;P Niedługo chyba kosmitów zacznę podejrzewać...
Jak znajdę czas to spróbuję pokombinować na winsock, poszperam w necie, coś tam jest.


06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

Spróbuj odpalić połączenie w trybie pasywnym:

Kopiuj
HINTERNET hFTP = InternetConnect(..., INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

@_0x666_
......
Działa!
Jesteś moim mistrzem ;D
Moja klawiatura nie jest w stanie przelać mojej wdzięczności ;) Kurde, dzięki ;)

Problem praktycznie rozwiązany, ale ciekawi mnie jaka była teoretyczna przyczyna? Co oznacza dokładniej ten tryb pasywny?

W ogóle oczywiście wszystkim bardzo dziękuję za zainteresowanie tematem ;)


KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 4 lata
  • Postów:1652
0

A wiesz w ogóle jak działa FTP-a? http://pl.wikipedia.org/wiki/File_Transfer_Protocol

several
Pytasz jakbyś nie znał odpowiedzi :P
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:minuta
0

Co oznacza dokładniej ten tryb pasywny?

Ten tryb oznacza, że klient wykonuje dodatkowy request w celu ustalenia na jaki port (socket) ma się podłączyć żeby pobrać dane.


06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
1

Co oznacza dokładniej ten tryb pasywny?

Tryb pasywny oznacza, że klient ustanawia połączenie do przesyłu danych. W trybie aktywnym klient podaje swoje namiary (IP i port), i wtedy serwer łączy się z klientem. Stąd wniosek prosty, że jeśli nie masz publicznego IP, nie masz przekierowanych portów lub po prostu masz je poblokowane, to tryb aktywny nie zadziała. Nie wiem, jaką aplikację robisz, ale zostaw możliwość wyboru między trybami pracy. Tryb pasywny nie musi zawsze działać.

R0
  • Rejestracja:około 17 lat
  • Ostatnio:około 10 lat
0

No jakbym wiedział jak to wszystko działa to pewnie nie miałbym takich problemów ;)
No tak to jest, ze czasami chcemy coś wykorzystywać w praktyce nie znając podstaw teoretycznych... Przynajmniej mi się to zdarza ;P Ehh, nie ma to jak zdobywać wiedzę od d*** strony, sam jestem sobie winien. W każdym razie już lepiej rozumiem jak to całe ftp działa. Kolejny krok do przodu.
Jeszcze raz dziękuję wszystkim, jak dla mnie temat zamknięty.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.