Bonjour à tous,
J'ai écrit un exemple simple de sockets en 2 fichiers : Server1.c (qui rentre dans une boucle infinie pour écouter les clients) et Client1.c (qui envoie un message simple au serveur).
Les 2 fichiers sont compilés et s'exécutent mais le processus serveur ne reçoit rien du processus client car il doit normallement afficher la phrase qu'il reçoit du client.
Les 2 programmes sont lancés sur la même machine.
Voici le code de Server1.c :
Et voici le code de Client1.c :
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 /***********************************SERVEUR TCP**********************************/ #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netdb.h> #include<unistd.h> #include<stdlib.h> #define PORTS 2058 main() { int namelen, sock, nsock; char buf[20]; struct sockaddr_in adr_s, adr_c; int lg, n, pid; /* Cr�ation socket */ sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); /* Attachementsocket */ /**************************************************************************************/ /* Server address */ /**************************************************************************************/ /*construit_adresse_locale (&adr_c, 0); */ adr_s.sin_family = AF_INET; adr_s.sin_addr.s_addr = INADDR_ANY; adr_s.sin_port = PORTS; bind(sock, (struct sockaddr*)&adr_s, sizeof(adr_s)); listen(sock,5); /*Signal(SIG_CHLD, SIG_IGN);*/ /************************************************************************************/ /* Infinite Loop */ /************************************************************************************/ While(1==1) { /* Attente de question sur la socket */ printf("Avant accept\n"); lg= sizeof(adr_c); nsock= accept (sock, (struct sockaddr*)&adr_c, &lg); printf("Apres accept\n"); pid= fork(); if (pid== 0) { close (sock); read (nsock, buf, 20); printf("%s\n",buf); close (nsock); exit(0); } } }
Ai-je oublié quelque chose ?
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 /******************/ /* Client TCP */ /******************/ #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netdb.h> #include<unistd.h> #define PORTS 2058 main() { struct hostent*h; struct sockaddr_in adr_s,adr_c; char buf[20]; int sock; /* cr�ationsocket */ sock= socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); /* Attachementsocket */ /**************************************************************************************/ /* Client address */ /**************************************************************************************/ /*bzero(&adr_c, sizeof(adr_c)); */ memset(&adr_c, 0x0, sizeof(adr_c)); adr_c.sin_family = AF_INET; adr_c.sin_addr.s_addr = INADDR_ANY; adr_c.sin_port = PORTS; /*adresse_ip= INADDR_ANY, port = deuxi�me argument;*/ bind(sock, (struct sockaddr*)&adr_c, sizeof(adr_c)); /* Construction adresse du serveur */ h=gethostbyname("localhost"); /**************************************************************************************/ /* Server address */ /**************************************************************************************/ bzero((char *) &adr_s, sizeof(adr_s)); adr_s.sin_family = AF_INET; adr_s.sin_addr.s_addr = *h->h_addr; adr_s.sin_port = PORTS; /*adresse_ip= h.addr, port = PORTS*/ connect (sock,(struct sockaddr*)&adr_s, sizeof(adr_s)); write(sock, "bonjour, serveur!! ", 20); close (sock); }
Auriez-vous une idée ?
Merci beaucoup pour votre aide.
Laurent.
Partager