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 :

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);
}
}
}
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
 
/******************/
/* 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);
 
}
Ai-je oublié quelque chose ?

Auriez-vous une idée ?

Merci beaucoup pour votre aide.

Laurent.