protokół ftp w c++

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

protokół ftp w c++

Post autor: sentrio »

Cześć to mój pierwszy temat. Chciałbym się dowiedzieć jak użyć protokołu ftp w programie. Chciałbym napisać prosty serwer i klienta do niego. Nie mogę znaleźć żadnych informacji . Dodam że nie zależy mi na żadnych bibliotekach graficznych jak np : qt . Program ma działać na linuxie w konsoli i robić swoje . Za wszelką pomoc z góry dziękuje.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: beluosus »

Po pierwsze skoro nie możesz znaleźć żadnych informacji to znaczy, że będzie szło bardzo ciężko... a teraz do rzeczy: na starcie powinieneś rozważyć dwa główne problemy:
- użyjesz biblioteki do ftp.
- sam napiszesz obsługę protokołu (RFC 959).
Przy drugim punkcie pojawiają się dwa podproblemy:
- użyjesz standardowych gniazd.
- skorzystasz z biblioteki do łączenia z internetem (np. C++ Socket Library).
Kiedy wybierzesz drogę możesz zacząć planować kolejne kwestie, takie jak opcje programu. Myślę, że łatwiej najpierw napisać aplikację kliencką (do testowania używać jakiś znany daemon FTP), a następnie jeśli starczy sił wziąć się za serwer. :)
Zawsze też możesz przejrzeć źródło jakiegoś programu ftp, jakich jest wiele.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

coś chyba słabo szukasz...
a tak btw, to w Qt można napisać przecież konsolową aplikację, w wxWidgets też.

Kilka linków, które znalazłem w 3 min
ftp jest tak popularnym protokołem, że szczerze bym się zdziwił, gdybyś nic nie było
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

dzięki za linki . Mam pytanie ponieważ jestem początkujący w linuxie. jak połączyć bibliotekę z tego linka
http://nixbit.com/cat/system/networking/ftplib/#
z kompilatorem geany. Z góry dziękuję.

znalazłem też kod z biblioteką <ftplib.h>

Kod: Zaznacz cały

/* example toy application for ftplib 

   args are: hostname, login, passwd, cddir, lsdir (both possibly as empty
   strings ""), long?

   ./example myftpserver mylogin mypassd "" "" 0
   ./example myftpserver mylogin mypasswd "mydir" "subdir" 1

*/

#include <stdio.h>
#include <stdlib.h>
#include "ftplib.h"

int error(char *msg)
{
  fprintf(stderr, "%s\n", msg);
  exit(1);
}

int process_entry(char *ent, unsigned len)
{
  printf("%s\n", ent);
  return 0;
}

int main(int argc, char **argv)
{
  /* this enables printing of sent FTP commands */
  ftp_debug=1;
  /* and this printing of status responses */
  ftp_verbose=1;

  /* check number of arguments */
  if (argc!=7) error("args");

  /* open the FTP connection */
  if (ftp_open(argv[1], argv[2], argv[3])) error("ftp_open");

  /* perform cd only if a non empty string was given */
  if (strlen(argv[4])) ftp_cd(argv[4]);

  /* perform the directory listing */
  ftp_ls(atoi(argv[6]), argv[5], process_entry);

  /* the end */
  ftp_close();
}

EDIT:
Już mi nie chodzi o połączenie tej biblioteki z geany tyko może już być połączenie z gcc lub g++ .
Na pewno ktoś już to robił . Bardzo mi na tym zależy . Proszę o pomoc.

EDIT:
Męczę się już ponad dwa dni . Zainstalowałem w synaptiku pakiety ftplib3 i ftplib-dev , ściągnołem całą bibliotekę z linku wyżej . Do programu dodaję #include "scieżka do ftplib.h i ftplib.c". To też nic nie daje. Nie wiem co dalej robić . Proszę o pomoc. Znalazłem link do forum o tym samym . Mój angielski jest sredni. Może coś źle robię http://cboard.cprogramming.com/c-progra ... sible.html. Jak ktoś może to proszę o pomoc, bardzo mi na tym zależy.:wall:
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

ale jaki masz błąd? Podczas kompilowania (czyli np nie znajduje Ci pliku ftplib.h) czy podczas linkowania?
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

daje screna . Bibliotekę wypakowałem na pulpicie a przykładowy program jest w katalogu winnt , tam gdzie 'ftplib.h'. Chciałbym napisać najprościejszego klienta ftp , ten kod który jest w gedit po skompilowaniu powinien wyświetlić zawartość serwera ftp . Programowania uczę się od roku w c, c++ bo jestem w technikum informatycznym i chciałbym pokazać na wrześniu że coś się nauczyłem. Dodam ,że na zdjęciu zaznaczyłem bibliotekę i ten przykładowy kod .
http://rapidshare.com/files/415199962/ftp.jpg

:wall:
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: dawwin »

A jakim poleceniem to kompilujesz? I co ci wywala kompilator?
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

nie includuje się plików *.c

Wklej tez komunikaty wyrzucane przez kompilator
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

Kod: Zaznacz cały

lucjan@lucjan-laptop:~/Pulpit/ftplib-3.1-1/winnt$ gcc ftp.c -lftp
/tmp/ccwTZ7BA.o: In function `main':
ftp.c:(.text+0x28f3): undefined reference to `FTP_OPEN'
ftp.c:(.text+0x2922): undefined reference to `ftp_cd'
ftp.c:(.text+0x294e): undefined reference to `ftp_ls'
ftp.c:(.text+0x2953): undefined reference to `Ftp_Close'
collect2: ld returned 1 exit status
lucjan@lucjan-laptop:~/Pulpit/ftplib-3.1-1/winnt$ 

kompilacja : gcc ftp.c -lftp

EDIT:
Pewnie jesteście ode mnie starsi . Studiujecie lub skończyliście studia . Jak wy pisaliście jakieś klienty ftp ?
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: dawwin »

A jeśli skompilujesz z parametrami -Wall -pedantic to zobaczysz coś takiego:
main.c:39: warning: implicit declaration of function ‘ftp_open’
main.c:42: warning: implicit declaration of function ‘ftp_cd’
[...]
co oznacza, że nagłówek #include <ftplib.h> nie zawiera takich funkcji. Znalazłem w nim takie:
extern void FtpInit(void);
extern char *FtpLastResponse(netbuf *nControl);
extern int FtpConnect(const char *host, netbuf **nControl);
extern int FtpOptions(int opt, long val, netbuf *nControl);
extern int FtpLogin(const char *user, const char *pass, netbuf *nControl);
extern int FtpAccess(const char *path, int typ, int mode, netbuf *nControl,
netbuf **nData);
extern int FtpRead(void *buf, int max, netbuf *nData);
extern int FtpWrite(void *buf, int len, netbuf *nData);
extern int FtpClose(netbuf *nData);
extern int FtpSite(const char *cmd, netbuf *nControl);
extern int FtpSysType(char *buf, int max, netbuf *nControl);
extern int FtpMkdir(const char *path, netbuf *nControl);
extern int FtpChdir(const char *path, netbuf *nControl);
extern int FtpCDUp(netbuf *nControl);
extern int FtpRmdir(const char *path, netbuf *nControl);
extern int FtpPwd(char *path, int max, netbuf *nControl);
extern int FtpNlst(const char *output, const char *path, netbuf *nControl);
extern int FtpDir(const char *output, const char *path, netbuf *nControl);
extern int FtpSize(const char *path, int *size, char mode, netbuf *nControl);
extern int FtpModDate(const char *path, char *dt, int max, netbuf *nControl);
extern int FtpGet(const char *output, const char *path, char mode,
netbuf *nControl);
extern int FtpPut(const char *input, const char *path, char mode,
netbuf *nControl);
extern int FtpRename(const char *src, const char *dst, netbuf *nControl);
extern int FtpDelete(const char *fnm, netbuf *nControl);
extern void FtpQuit(netbuf *nControl);
Chyba, że pobrałem inną bibliotekę niż ty.

Jeśli chodzi o drugie pytanie to ja jak pisałem serwer ftp to sam programowałem obsługę protokołu za pomocą gniazd. Jest to trudniejsze, ale dużo się można nauczyć
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

hmm... dostałem ten sam błąd co Ty.
Jeśli nikt nie znajdzie odpowiedzi, to proponuję skorzystać np z Qt ale w konsoli. Tam jest gotowa klasa do ftp.
Powiem Ci, że czasem szkoda czasu na takie bawienie się - lepiej pisać programy :D
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: dawwin »

Odpowiedź jest taka, że w tej bibliotece można korzystać z funkcji, które wkleiłem dwa posty wyżej i powinno działać.
Niemniej jednak też polecam Qt, chyba, że czujesz się na siłach, aby pisać własną implementację protokołu
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: beluosus »

Ja polecam curla, tutaj przykład: http://curl.haxx.se/libcurl/c/ftpupload.html
Żeby się zalogować na konkretne konto trzeba ustawić użytkownika i hasło:

Kod: Zaznacz cały

    curl_easy_setopt(curl, CURLOPT_USERNAME, "beluosus");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "tajne0x0haslo");
Curl jest bardzo popularny (dobrze udokumentowany, przykłady), ma duże możliwości i wiele zastosowań więc powinien wiele nauczyć.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

dobre wieści . Udało mi się napisać program który się kompiluje . To przede wszystkim dzięki wam a zwłaszcza dawwinowi .

kod programu jest dostosowany do mojej sieci i konta na serwerze na windowsie (serwer filezilla) na którym jest user ftp bez hasła

Kod: Zaznacz cały

#include <stdio.h>
#include "ftplib.h"
int main()
{

   netbuf *ftpc ;
   FtpInit();
   if ( FtpConnect("192.168.1.2", &ftpc) ) printf("połączyles sie "); else
   perror("ERROR\n\n"); 
   FtpLogin("ftp", "" , ftpc);
   FtpQuit(ftpc);
} 
proszę was jeszcze o jedno . Nauczyłem się programować sockety (bibioteka sys/socket.h) tak podstawowo i uczę się dalej z książki "programowanie usług sieciowych".
Tutaj dałem do przetłumaczenia link : http://translate.google.pl/translate?hl ... libpp.html. Nie mogę znależć jakiegoś przykładowego kodu z tymi funkcjami tylko z tymi starszymi co są na początku tematu. Możecie coś napisać i podesłać . Z góry dzięki
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

Kod: Zaznacz cały

#include <stdio.h>
#include "ftplib.h"
int main()
{

   netbuf *ftpc ;
   FtpInit();
   if ( FtpConnect("localhost", &ftpc) ) printf("połączyles sie\n"); else
   perror("ERROR\n\n"); 
   FtpLogin("bartek", "kaban" , ftpc);
   FtpMkdir("katalog", ftpc);
   FtpQuit(ftpc);
}
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: dawwin »

Kod: Zaznacz cały

#include <stdio.h>
#include <ftplib.h>

#define TBLEN 256
#define FTPERROR fprintf(stderr, "Wystapil blad\n"); \
                 FtpQuit(cftp); \
                 return -1;

int main(int argc, char **argv)
{
	netbuf *cftp;
	char textbuffer[TBLEN] = {0};
	
	/* Sprawdzamy argumenty */
	if (argc < 5) {
		fprintf(stderr, "Uzycie: [adres ip] [login] [haslo] [katalog (np. /)]\n");
		return -1;
	}
	
	/* Inicjalizacja */
	FtpInit();
	
	/* Laczenie do serwera */
	printf("Laczenie z %s\n", argv[1]);
	if (FtpConnect(argv[1], &cftp) != 1) {
		fprintf(stderr, "Polaczenie z %s nieudane\n", argv[1]);
		return -1;
	}
	
	/* Logowanie. */
	printf("Polaczono, logowanie\n", argv[1]);
	if (FtpLogin(argv[2], argv[3], cftp) != 1) {
		fprintf(stderr, "Logowanie nieudane\n");
		FtpQuit(cftp);
		return -1;
	}
	
	/* Sprawdzamy, jaki system znajduje sie na serwerze. */
	printf("Sprawdzanie systemu na serwerze\n");
	if (FtpSysType(textbuffer, TBLEN-1, cftp) != 1) {
		FTPERROR
	}
	
	printf("System operacyjny na serwerze: %s\n", textbuffer);

	printf("Pobieranie zawartosci katalogu %s\n", argv[4]);
	/* Pobieramy liste plikow z danego w argv[4] katalogu i drukujemy go na ekranie.
	 * Jesli pierwszy argument do funkcji to NULL to funkcja drukuje do stdout, jesli nie
	 * to drukuje do zadanego pliku */
	if (FtpDir(NULL, argv[4], cftp) != 1) {
		FTPERROR
	}
	
	/* Konczymy polaczenie */
	FtpQuit(cftp);
	return 0;
}

A teraz w ramach ciekawostki - jak to samo zrobic na protokole FTP.
Otwierasz terminal. Wpisujesz polecenie
telnet [adres_serwera] 21
W otwartym programie telnet wpisujesz polecenie
USER [nazwa_uzytkownika]
Serwer odpowie:
331 Password required for [nazwa_uzytkownika]
wpisujesz
PASS [haslo]
jesli login i hasło są poprawne to zobaczysz komunikat
230 User [nazwa_uzytkownika] logged in
Teraz aby zobaczyc jaki system jest na serwerze wpisujesz
SYST
U mnie wyswietla się
215 UNIX Type: L8
A teraz chcemy wyświetlić zawartość katalogu / na serwerze.
Wpisujesz więc polecenie
CWD /

Powinieneś zobaczyć
250 CWD command successful
I teraz bardziej skomplikowana część.
Otwieramy drugie połączenie (bo FTP korzysta z dwóch). Wpisujemy polecenie
PASV
Serwer odpowie
227 Entering Passive Mode (127,0,0,1,212,19).
Pierwsze cztery wartości w nawiasie to adres IP, a ostatnie dwie
to numer portu. Obliczasz go tak: piąta wartość razy 256 plus szósta
czyli w moim przypadku 212*256+19.
Otwierasz drugą konsolę i wpisujesz
telnet [podany w odpowiedzi adres ip] [numer obliczonego portu]
I ostatecznie w tym pierwszym terminalu wpisujesz
LIST
W drugim terminalu zobaczysz listę katalogów z serwera.
Połączenie kończysz wpisując
QUIT
W przypadku pisania własnej implementacji tworzy się program, który będzie robił między innymi to, co ja Ci napisałem za pomocą funkcji do obsługi gniazd.
Mam nadzieję, że pomogłem :grin:
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

Dzięki za odpowiedzi. Trochę mnie nie było . Postanowiłem napisać pseudo klienta ftp z kilkoma funkcjami ale mam problem bo zacząłem się uczyć od c++ i teraz muszę napisać program w c . Nawet printf() i scanf() troche mnie przeraziły ale dałem sobie radę . Mam problem z funkcją numeracja . Jak pisałem w cpp to wszystko było string a tu ciągle tablice charowe . chciałbym żeby zamiast tego scanfa do wczytywania polecenia było coś w rodzaju

Kod: Zaznacz cały

getline (cin , polecenie, "\n" )
; żeby wczytywało całą linię ze spacjami itd.

Kod: Zaznacz cały

#include <stdio.h>
#include <string>

	// funkcje
	void pobierz (void);
	void wyslij (void);
	void DIR (void);
	void utworz_katalog (void);
	void usun_katalog (void);
	
	// definicje funkcji zrobie pozniej
	
	void pomylka (void)
	{
		printf("nie rozpoznane polecenie\n");
	}

	void pomoc (void)
	{
		printf("\n#dostepne funkcje \n");
	    printf("#   pobierz     wyslij     DIR\n");
	    printf("#   utworz_katalog     usun_katalog     pomoc\n\n");
	}

	// przydziela numery poleceniom
	int numeracja ( char zadanie[] )
	{
		int numer;
		if (zadanie == "DIR" ) numer = 1; else 
		if (zadanie == "pobierz" ) numer = 2; else 
		if (zadanie == "wyslij" ) numer = 3; else 
		if (zadanie == "utworz_katalog" ) numer = 4; else 
		if (zadanie == "usun_katalog" ) numer = 5; else 
		if (zadanie == "pomoc" ) numer = 6; else numer = 7; 
		return numer;
	}

	
int main()
{	
	char IP[20] , login[20] , haslo[20] , polecenie[30];
	char koniec[]="koniec";
	
	
	printf("podaj IP serwera : ");
	scanf("%s",IP);
	printf("podaj login      : ");
	scanf("%s",login);
	printf("podaj haslo      : ");
	scanf("%s",haslo);
	printf("symulacja || zalogowales sie . . .\n");

	
	while ( 1 )
	{
			printf("%s : ", login);
			scanf ("%s", polecenie);
			
			if (polecenie == koniec) 
			{
				printf("program konczy swoja prace . . .\n");
				break;
			} 
			else 
			{
				
				int numer_zadania=numeracja(polecenie);
		
					// **********************************
			
					switch ( numer_zadania )
					{
						case 1:
						{
							printf("DIR\n\n");
							break;
						}
						
						case 2:
						{
							printf("pobierz\n\n");
							break;
						}
						
						case 3:
						{
							printf("wyslij\n\n");
							break;
						}
						
						case 4:
						{
							printf("utworz_katalog\n\n");
							break;
						}
						
						case 5:
						{
							printf("usun_katalog\n\n");
							break;
						}
						
						case 6:
						{
							pomoc();
							break;
						}
						
						case 7:
						{
							pomylka();
							break;
						}
						
					}
		}
			
		
		// **********************************
	} 
}
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: protokół ftp w c++

Post autor: kabanek »

Kod: Zaznacz cały

ssize_t getline (char **lineptr, size_t *n, FILE *stream)
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: protokół ftp w c++

Post autor: sentrio »

problem z getline rozwiązany . Użyłem fgets tylko czy ktoś widzi dlaczego są błędy z funkcją numeracja .

poprawiony kod :

Kod: Zaznacz cały

#include <stdio.h>
#include <string>

	// funkcje
	void pobierz (void);
	void wyslij (void);
	void DIR (void);
	void utworz_katalog (void);
	void usun_katalog (void);
	
	// definicje funkcji zrobie pozniej
	
	void pomylka (void)
	{
		printf("nie rozpoznane polecenie\n");
	}

	void pomoc (void)
	{
		printf("\n#dostepne funkcje \n");
	    printf("#   pobierz     wyslij     DIR\n");
	    printf("#   utworz_katalog     usun_katalog     pomoc\n\n");
	}

	// przydziela numery poleceniom
	int numeracja ( char zadanie[] )
	{
		int numer;
		if (zadanie == "DIR" ) numer = 1; else 
		if (zadanie == "pobierz" ) numer = 2; else 
		if (zadanie == "wyslij" ) numer = 3; else 
		if (zadanie == "utworz_katalog" ) numer = 4; else 
		if (zadanie == "usun_katalog" ) numer = 5; else 
		if (zadanie == "pomoc" ) numer = 6; else numer = 7; 
		return numer;
	}

	
int main()
{	
	char IP[20] , login[20] , haslo[20] , polecenie[30];
	char koniec[]="koniec";
	
	
	printf("podaj IP serwera : ");
	scanf("%s",IP);
	printf("podaj login      : ");
	scanf("%s",login);
	printf("podaj haslo      : ");
	scanf("%s",haslo);
	printf("symulacja || zalogowales sie . . .\n");

	
	while ( 1 )
	{
			printf("%s : ", login);
			fgets(polecenie,sizeof polecenie,stdin);
			
			if (polecenie == koniec) 
			{
				printf("program konczy swoja prace . . .\n");
				break;
			} 
			else 
			{
				
				int numer_zadania=numeracja(polecenie);
		
					// **********************************
			
					switch ( numer_zadania )
					{
						case 1:
						{
							printf("DIR\n\n");
							break;
						}
						
						case 2:
						{
							printf("pobierz\n\n");
							break;
						}
						
						case 3:
						{
							printf("wyslij\n\n");
							break;
						}
						
						case 4:
						{
							printf("utworz_katalog\n\n");
							break;
						}
						
						case 5:
						{
							printf("usun_katalog\n\n");
							break;
						}
						
						case 6:
						{
							pomoc();
							break;
						}
						
						case 7:
						{
							pomylka();
							break;
						}
						
					}
		}
			
		
		// **********************************
	} 
}

o i czy jak skonczę tego klienta to będzie on użyteczny jak inny "markowy" klient ?
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: protokół ftp w c++

Post autor: dawwin »

Jeśli będzie dobrze dopracowany to możliwe, że tak
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 9 gości