Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] Klient FTP oraz LWIP - połączenie dla kanału danych

grochal777 02 May 2018 13:32 369 2
  • #1
    grochal777
    Level 9  
    Hej wszystkim!
    Mam pytanie dotyczące połączenia klient-serwer ftp.
    Realizuje tego typu połączenie na mikrokontrolerze z wykorzystaniem lwip oraz freertos.
    W przypadku takiej komunikacji mamy dwa kanały - kanał poleceń oraz kanał danych.
    Realizuje jak na razie jedynie tryb pasywny komunikacji - a więc to klient nawiązuje połączenia.
    Najpierw nawiązuję połączenie dla kanału poleceń. Realizuje logowanie (serwer odpowiada prawidłowo) następnie zlecam serwerowi przejście do trybu pasywnego (serwer odpowiada - podaje swoje ip oraz port na którym zaczyna nasłuchiwać - kanał danych).
    Pobieram z odebranej ramki potrzebne informacje (ip oraz port) i przechodzę do nawiązania połączenia (dla kanału danych). Następnie chciałem przejść do wysyłania/odbierania danych po ftp.
    Przykładowa ramka ma postać (po przekonwertowaniu na tekst):
    Code: c
    Log in, to see the code

    A więc mam ip oraz port (dwie ostatnie liczby - w tym wypadku port 56051) na którym serwer oczekuje danych.
    Tu pojawia się problem. Połączenie nie zostaje nawiązane. Wartość error wynosi -13 - a więc wedle biblioteki lwip - >"Connection aborted."

    Na początku tworzę dwie zmienne odpowiedzialne za połaczenie. Jedną dla połączenia kanału poleceń, druga dla kanału danych (biblioteka liwp api.h):
    Code: c
    Log in, to see the code

    Poniżej funkcja odpowiadająca za nawiazanie połączenia dla kanału danych, która wywoływana jest przeze mnie bezpośrednio po odebraniu ramki odpowiedzi na ustawienie passywnego trybu serwera:
    Code: c
    Log in, to see the code


    Zastanawia mnie co robię źle.
    Dlaczego klient nie realizuje połączenia z portem na którym nasłuchuje serwer?
    W przypadku, gdy w miejscu wywołania funkcji otwierającej połączenie na kanale danych (port 56051 w opisywanym przypadku) wywołam tę samą funkcję ale jako port ustawiam port ftp - 21 - połączenie nawiązywane jest błyskawicznie.

    Pozdrawiam wszystkich!
  • #2
    grochal777
    Level 9  
    Ok, zauważyłem, że bez problemu mam możliwość połączenia z zewnętrznym serwerem.
    Problem pojawia się gdy próbuję połączyć się lokalnie. (na kompie uruchomiony serwer ftp, mikrokontroler połączony przewodem ethernetowym)

    Zaznaczam, że po porcie 21 - porcie poleceń - komendy przesyłane są prawidłowo. Jedynie nie mogę nawiązać połączenia do przesyłu danych.
  • #3
    grochal777
    Level 9  
    Ok, zauważyłem, że bez problemu mam możliwość połączenia z zewnętrznym serwerem.
    Problem pojawia się gdy próbuję połączyć się lokalnie. (na kompie uruchomiony serwer ftp, mikrokontroler połączony przewodem ethernetowym)

    Zaznaczam, że po porcie 21 - porcie poleceń - komendy przesyłane są prawidłowo. Jedynie nie mogę nawiązać połączenia do przesyłu danych.

    Dodano po 30 [minuty]:

    Należy odblokować porty >1024.
    Zapora Windows Defender - > Zaawansowane ustawienia -> link poniżj
    https://www.download.net.pl/jak-odblokowac-port-w-zaporze-windows-7-81-i-10/n/10496/