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):
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):
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:
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!
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
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
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
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!