8 Lotoserveur

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

Annexe 8 : Code source lotoserveur.

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 #i n c l u d e < s t d l i b . h>
11 #i n c l u d e <time . h>
12
13
14 i n t main ( i n t argc , c h a r c o n s t ∗ argv [ ] )
15 {
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 int port ; /∗ Numero de p o r t du s e r v e u r ∗/
21
22 i n t newsd ; /∗ Id de l a s o c k e t e n t r a n t e ∗/
23 s t r u c t sockaddr_in newsa ; /∗ sockaddr_in de l a c o n n e c t i o n e n t r a n t e ∗/
24 i n t newsalength ;
25

26 /∗ 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 ∗/


27 i f ( a r g c != 2 ) {
28 p r i n t f ( " pingserveurTCP . E r r e u r d ’ arguments \n" ) ;
29 p r i n t f ( " Syntaxe : %% pingserveurTCP numero_port \n" ) ;
30 exit (1) ;
31 }
32
33 /∗ R e c u p e r a t i o n numero p o r t p a s s e en argument ∗/
34 p o r t = a t o i ( argv [ 1 ] ) ;
35
36 // C o n f i g u r a t i o n de l ’ a d r e s s e du s e r v e u r
37 s a . s i n _ f a m i l y = AF_INET ;
38 s a . sin_addr . s_addr = INADDR_ANY;
39 sa . sin_port = htons ( port ) ;
40
41 // C r a t i o n de l a s o c k e t s e r v e u r
42 i f ( ( sd = s o c k e t (AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
43 p e r r o r ( " E r r e u r l o r s de l a c r a t i o n de l a s o c k e t " ) ;
44 exit (1) ;
45 }
46
47

51
48 // L i a i s o n de l a s o c k e t l ’ a d r e s s e e t au p o r t
49 i f ( bind ( 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 ) {
50 p e r r o r ( " E r r e u r l o r s de l a l i a i s o n " ) ;
51 exit (1) ;
52 }
53

54 // Mise en coute pour l e s c o n n e x i o n s e n t r a n t e s


55 l i s t e n ( sd , 5 ) ;
56
57 p r i n t f ( " S e r v e u r en coute . . . \ n" ) ;
58
59

60 int i = 0;
61
62 char b u f f e r [ 1 0 0 ] ;
63 int longueur ;
64
65

66 while (1) {
67 /∗ n e w s a l e n g t h c o n t i e n t l a t a i l l e t h e o r i q u e de l a s t r u c t u r e
newsa ∗/
68 n e w s a l e n g t h = s i z e o f ( newsa ) ;
69 i f ( ( newsd = a c c e p t ( sd , ( s t r u c t s o c k a d d r ∗ ) &newsa , &n e w s a l e n g t h ) )
< 0 ) {
70 p r i n t f ( " E r r e u r s u r a c c e p t \n" ) ;
71 exit (1) ;
72 }
73
74 /∗ Compteur nombre c o n n e x i o n s ∗/
75 i ++;
76 p r i n t f ( " Connection No %d s u r l e p o r t %d . . . \ n" , i , n t o h s ( newsa .
sin_port ) ) ;
77
78 int j ;
79 s r a n d ( time (NULL) ) ;
80 f o r ( j =0; j <6; j ++){
81 l o n g u e u r = s p r i n t f ( b u f f e r , "%d " , rand ( ) %49) ;
82 w r i t e ( newsd , b u f f e r , l o n g u e u r ) ;
83 }
84 c l o s e ( newsd ) ;
85 }
86

87 // Fermer l a s o c k e t s e r v e u r ( c e code ne s e r a j a m a i s a t t e i n t )
88 c l o s e ( sd ) ;
89
90 return 0;
91 }

re223/lotoserveur.c

52

You might also like