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.