IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Réalisation d'un serveur FTP


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 56
    Points : 50
    Points
    50
    Par défaut Réalisation d'un serveur FTP
    Salut.
    Je cherche a faire un petit serveur FTP (sans thread), une seule connexion.
    Bref le truc basic de chez basic

    J'ai donc récupéré un code qui ouvre un socket et qui ecoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <time.h> 
     
    int main(int argc, char *argv[])
    {
    	int ftp_socket = 0, connfd = 0, read_size, i;
    	struct sockaddr_in serv_addr; 
     
    	char client_message[2000];
    	char sendBuff[1025];
    	time_t ticks; 
     
    	ftp_socket = socket(AF_INET, SOCK_STREAM, 0);
    	if (ftp_socket == -1)
    	{
    		printf("Could not create socket");
    		return 1;
    	}
    	memset(&serv_addr, '0', sizeof(serv_addr));
    	memset(sendBuff, '0', sizeof(sendBuff)); 
     
    	serv_addr.sin_family = AF_INET;
    	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    	serv_addr.sin_port = htons(5001); 
     
    	if (bind(ftp_socket, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
    	{
    		printf("bind failed. Error");
    		return 1;
    	} 
     
    	listen(ftp_socket, 10);
    	int server_run = 1;
     
    	while(server_run)
    	{
    		struct sockaddr_in client_addr;
    		connfd = accept(ftp_socket, (struct sockaddr*)NULL, NULL);
    		if (connfd < 0)
    		{
    			printf("client error: %d\n", connfd); 
    		}
    		else
    		{
    			sprintf(sendBuff, "220---UltraSmall FTP serveur\r\n");
    			write(connfd, sendBuff, strlen(sendBuff)); 
     
    			while((read_size = recv(connfd, client_message , 2000 , 0)) > 0 )
    			{
    				for (i = 0; i < strlen(client_message); i++)
    					if (client_message[i] == '\n' || client_message[i] == '\r')
    						client_message[i] = '\0';
    				printf("%s\n", client_message);
     
    				snprintf(sendBuff, sizeof(sendBuff), "OK: [%s] %.24s\r\n", client_message, ctime(&ticks));
    				write(connfd, sendBuff, strlen(sendBuff)); 
     
    				if (strcmp(client_message, "exit") == 0)
    				{
    					server_run = 0;
    					break;
    				}
    			}
    			close(connfd);
    			sleep(1);
    		}
    	}
    }
    Lorsque je me connecte avec un telnet j'obtient la réponse suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > telnet xxx.xxx.xxx.xxx 5001
    Trying xxx.xxx.xxx.xxx...
    Connected to bsd.webshaker.net.
    Escape character is '^]'.
    220---UltraSmall FTP serveur
    et lorsque je tape une commande je la voit bien arriver coté serveur.

    par contre si j'essaye la commande FTP ou lorsque j'utilise FileZilla ca me marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > ftp test@xxx.xxx.xxx.xxx 5001
    Connected to xxx.xxx.xxx.xxx.
    220---UltraSmall FTP serveur
    Et là si je tape une commande, elle n’apparaît pas coté serveur !
    Je me demande si cela ne vient pas de l'absence d’authentification ou plus simplement de l'attente d'une reponse de la part du serveur qu respecterai un format bien particulier.

    Je n'arrive pas a trouver sur internet les échange client / serveur lors d'une connexion FTP !

    Si quelqu'un peut m'aider.
    Merci.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Le protocole complet est dans la RFC 959.
    Il y a eu plusieurs RFC par la suite mais si tu suis le protocole décrit dans la 959, ce sera bon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Oui en effet avec le RFC, j'ai réussi à recevoir et traiter quelques commandes.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo