ftp

Transfer plików (FTP)

Dla niewtajemniczonych


Jeżeli wiesz czym jest FTP to przejdź do następnego paragrafu.

FTP (file transport protocol) jest to protokół, który pozwala nam manipulować plikami w sposób zdalny. Ten protokół jest sam w sobie prosty, posiada kilka komend typu: utwórz folder, usuń plik, pobierz plik, itp. Aby one działały to komputer do którego wysyłasz te komendy musi mieć uruchomiony serwer FTP, aby mógł „zrozumieć” i wykonać nasze komendy.

Podsumowując: do czego może nam się przydać FTP? Otóż dzięki temu możemy np. zrobić taki feature w naszej grze jak pobieranie map z sieci i dzięki FTP będziemy mogli to osiągnąć. Moglibyśmy także zapisywać zapisywać grę gracza nie lokalnie na dysku lecz w „chmurze”. Dzięki temu mógłbyś też zrobić automatyczne aktualizacje swojej gry.

Jeżeli chcesz dowiedzieć się więcej o FTP polecam inne źródła, chociażby Wikipedie.

 

Klasa klienta FTP


Klasa, która służy do obsługiwania FTP w SFML to jak łatwo można się domyślić sf::Ftp. Jest to klient, czyli możemy łączyć się z serwerem FTP, wysyłać mu komendy, wysyłać/pobierać pliki.

Każda metoda w tej klasie zawiera komendę FTP oraz zwraca standardową odpowiedź FTP. Każda odpowiedź zawiera kod statusu (podobne do HTTP, ale nie takie same) oraz wiadomość informującą nas co się dokładnie stało. Odpowiedzi FTP są zawarte w klasie  sf::Ftp::Response.

Status można użyć do sprawdzenia czy komenda zakończyła się pomyślnie. Jeżeli wartość statusu jest mniejsza niż 400 to zakończyło się powodzeniem, w przeciwnym razie mamy do czynienia z błędem.

Możesz też użyć metody isOk(), która mówi nam tylko czy zakończono błędem czy pomyślnie.

Jeżeli nie dbasz o szczegóły można to zrobić nawet jeszcze krócej:

Dla lepszej czytelności te sprawdzenia poprawności wykonania komend nie będą pisane w dalszej części tego poradnika, ale ty powinieneś je pisać w swoim kodzie.

 

Łączenie z serwerem FTP


Pierwszą rzeczą jaką musimy zrobić to połączenie się z serwerem:

Jako adres podajemy jakikolwiek poprawny sf::IpAdress: ip, URL, nazwę sieci…

Standardowym portem dla FTP jest 21. Jednakże gdyby twój serwer korzystał z innego portu możesz dodać go jako drugi argument.

Jako trzeci opcjonalny argument możesz podać timeout, czyli czas jaki będzie czekał twój program na nawiązanie połączenia z serwerem.

Gdy już udało ci się połączyć to następnym krokiem jest autoryzacja dostępu do serwera:

 

Komendy FTP


Tutaj znajdziesz wszystkie dostępne komendy w klasie sf::Ftp i ich krótki opis. Pamiętaj, że wszystkie komendy działają względnie do obecnej ścieżki, tzn jeżeli uruchomisz komendę będąc wcześniej w home/file, to komenda zadziała w folderze file, a nie home. Działa to dokładnie tak samo jak z komendami w konsoli na twoim OS.

Pobranie ścieżki na której obecnie pracujemy

sf::Ftp::DirectoryResponse to wyspecjalizowana klasa sf::Ftp::Response, która zawiera żądany katalog.

Pobieranie listy katalogów i plików w nich się zawierających

sf::Ftp::ListingResponse to klasa dziedziczona po sf::Ftp::Response posiadająca żądania do katalogów/plików.

Zmiana katalogu

„W górę”

czyli katalog, z którego weszliśmy do katalogu w którym jesteśmy teraz.

Tworzenie nowego katalogu

Usunięcie istniejącego folderu

Zmiana nazwy

Usunięcie istniejącego pliku

Pobranie pliku

Ostatni argument to sposób transferu pliku, istnieje ich kilka: Ascii (do plików tekstowych), Ebcdic (dla plików tekstowych używających zestawu znaków EBCDIC), Binary (dla plików nie-tekstowych). Ascii i Ebcdic mogą przekształcać tekst plik podczas jego transportowania, tak aby dopasować go do środowiska klienta. Binary bezpośrednio kopiuje plik bajt po bajcie.

Wysyłanie plików (na serwer)

Przedłużanie połączenia

Serwery FTP zazwyczaj kończą połączenie gdy nie jesteśmy przez jakiś czas aktywni (nie wysyłamy tam komend). Jeżeli chcesz uniknąć rozłączenia możesz użyć komendy.

 

Rozłączanie z serwerem FTP


Możesz się rozłączyć z serwerem w każdej chwili za pomocą metody:

 

Oryginalny artykuł