Vous êtes sur la page 1sur 2

Annexe 1 : Code source myftp.

1 #i n c l u d e <s t d i o . h>
2 #i n c l u d e < s t d l i b . h>
3 #i n c l u d e <u n i s t d . h>
4 #i n c l u d e < s t r i n g s . h>
5 #i n c l u d e <s t r i n g . h>
6 #i n c l u d e <s y s / t y p e s . h>
7 #i n c l u d e <s y s / s o c k e t . h>
8 #i n c l u d e <n e t i n e t / i n . h>
9 #i n c l u d e <netdb . h>
10
11 #d e f i n e FTPPORT 21 /∗ Numero du p o r t du s e r v e u r f t p ∗/
12
13 i n t main ( argc , argv )
14 int argc ;
15 c h a r ∗ argv [ ] ;
16 {
17 i n t sd ;
18 s t r u c t sockaddr_in s a ; /∗ S t r u c t u r e I n t e r n e t sockaddr_in ∗/
19 s t r u c t hostent ∗ hptr ; /∗ I n f o s s u r l e s e r v e u r ∗/
20
21 char ∗ se rveur ; /∗ Nom du s e r v e u r d i s t a n t ∗/
22 c h a r buf [ 2 5 6 ] ; /∗ B u f f e r ∗/
23 int n , i ;
24 c h a r msg [ ] = "USER TOTO\n" ; /∗ Commande FTP ∗/
25

26
27 /∗ V e r i f i c a t i o n du nombre d ’ arguments de l a l i g n e de commande ∗/
28 i f ( a r g c != 2 ) {
29 p r i n t f ( " myftp . E r r e u r d ’ arguments \n" ) ;
30 p r i n t f ( " Syntaxe : %% myftp nom_serveur_ftp \n" ) ;
31 exit (1) ;
32 }
33
34 /∗ R e c u p e r a t i o n nom du s e r v e u r ∗/
35 s e r v e u r = argv [ 1 ] ;
36
37 /∗ R e c u p e r a t i o n d e s i n f o s s u r l e s e r v e u r dans / e t c / h o s t s ou par DNS ∗/
38 i f ( ( h p t r = gethostbyname ( s e r v e u r ) ) == NULL) {
39 p r i n t f ( " Probleme de r e c u p e r a t i o n d ’ i n f o s s u r l e s e r v e u r \n" ) ;
40 exit (1) ;
41 }
42
43 /∗ I n i t i a l i s a t i o n l a s t r u c t u r e s o c k a d d r s a ∗/
44 /∗ bcopy ( v o i d ∗ s o u r c e , v o i d ∗ d e s t i n a t i o n , s i z e _ t t a i l l e ) ; ∗/
45 bcopy ( ( c h a r ∗ ) hptr−>h_addr , ( c h a r ∗ )&s a . sin_addr , hptr−>h_length ) ;
46
47 /∗ F a m i l l e d ’ a d r e s s e : AF_INET = PF_INET ∗/

37
48 s a . s i n _ f a m i l y = AF_INET ;
49
50 /∗ I n i t i a l i g s a t i o n du numero du p o r t ∗/
51 s a . s i n _ p o r t = h t o n s (FTPPORT) ;
52
53 /∗ C r e a t i o n de l a s o c k e t TCP ∗/
54 i f ( ( sd = s o c k e t (AF_INET, SOCK_STREAM, 0 ) ) < 0 ) { // AF_INET −> IPv4 | |
SOCK_STREAM −> TCP e t SOCK_DGRAM −> UDP
55 p r i n t f ( " Probleme l o r s de l a c r e a t i o n de s o c k e t \n" ) ;
56 exit (1) ;
57 }
58

59 /∗ E t a b l i s s e m e n t de l a c o n n e x i o n avec l e s e r v e u r f t p ∗/
60 i f ( ( c o n n e c t ( sd , ( s t r u c t s o c k a d d r ∗ ) &sa , s i z e o f ( s a ) ) ) < 0 ) {
61 p r i n t f ( " Probleme de c o n n e x i o n avec l e s e r v e u r \n" ) ;
62 exit (1) ;
63 }
64

65 /∗ L e c t u r e de l a b a n n i e r e d ’ a c c u e i l du s e r v e u r f t p ∗/
66 n = r e a d ( sd , buf , s i z e o f ( buf ) ) ;
67
68 /∗ E c r i t u r e s u r s t d o u t ∗/
69 w r i t e ( 1 , buf , n ) ;
70

71 w h i l e ( strncmp ( buf , "QUIT" , 4 ) != 0 ) {


72 // L e c t u r e de l a commande e n t r e e par l ’ u t i l i s a t e u r
73 n = r e a d ( 0 , buf , s i z e o f ( buf ) ) ;
74
75 // Renvoi de l a commande au s e r v e u r f t p
76 w r i t e ( sd , buf , n ) ;
77
78 // a t t e n t e de 1 s e c o n d e a f i n de
79 // donner l e temps au s e r v e u r pour t r a i t e r l a commande
80 sleep (1) ;
81
82 // L e c t u r e de l a b a n n i e r e du s e r v e u r f t p
83 n = r e a d ( sd , buf , s i z e o f ( buf ) ) ;
84
85 // E c r i t u r e s u r s t d o u t
86 w r i t e ( 1 , buf , n ) ;
87 }
88

89
90 /∗ Fermeture de l a s o c k e t ∗/
91 c l o s e ( sd ) ;
92
93
94

95 exit (0) ;
96 }

re223/myftp.c

38

Vous aimerez peut-être aussi