bjr,

voila je doi realiser un serveur/client en tcp et pour le moment je voudrai deja essayer que le client enoye la date et l'heure au serveur puis que le serveur l'affiche.
j'utilise les methodes read et write mais le probleme est que le serveur affiche le message en boucle, voici le code:

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
 
#include	<stdio.h>
#include	<sys/types.h>
#include	<sys/socket.h>
#include	<netinet/in.h>
#include	<arpa/inet.h>
 
#define MASOCKET 1200
#define MAX 512
 
main(){
 
	char			buff[MAX];
	time_t			tics;
	int 			sock;
	struct sockaddr_in	serv_addr;
 
	bzero(&serv_addr, sizeof(serv_addr));
 
	serv_addr.sin_family		= AF_INET;
	serv_addr.sin_addr.s_addr	= inet_addr("193.50.49.96");
	serv_addr.sin_port		= htons(MASOCKET);
 
	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
		perror("Client->can't open stream socket");
		exit(1);
	}
 
	if (connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
		perror("Client->can't connect to server");
		exit(1);
	}
 
	tics = time(NULL);     
       snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&tics)); 
 
 
        if (write(sock, buff, strlen(buff)) < 0){      
            perror("write error"); 
            exit(1);    
	} 
 
	close(sock);
	exit(0);
}


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
 
#include	<stdio.h>
#include	<sys/types.h>
#include	<sys/socket.h>
#include	<netinet/in.h>
#include	<sys/un.h>
#include	<arpa/inet.h>
 
#define MASOCKET 1200
main(){
 
	int 	sock, newsock, childpid;
	struct sockaddr_in serv_addr, client_addr; 
 
	if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
		perror("Serveur->Socket error");
		exit(1);
	}
 
	bzero(&serv_addr, sizeof(serv_addr));
	serv_addr.sin_family		= AF_INET;
	serv_addr.sin_addr.s_addr	= htonl(INADDR_ANY);
	serv_addr.sin_port		= htons(MASOCKET);
 
	if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
		perror("Serveur->Bind error");
		exit(1);
	}
 
	if(listen(sock, 9) < 0){
		perror("Serveur->Listen error");
		exit(1);
	}
 
	while(1){
 
		perror("bbb");
		newsock = accept(sock, (struct sockaddr *) NULL, NULL);
 
		if (newsock < 0){
			perror("Server->Accept error");
			exit(1);
		}
 
		if ( (childpid = fork()) < 0){		//echec création du fils
			perror("Serveur->Fork error");
			exit(1);
		}
 
		else if (childpid == 0){			//on est dans le fils
			close(sock);				
			perror("aaa");			
			ecoute(newsock);			
			exit(0);				
		}						
		close(newsock);		
	}
}

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
 
#define MAX 512
 
ecoute(sock)
 
int sock;
 
{
	char	recvline[MAX];
	int 	n;
 
	while(1){
 
 
		while((n = read(sock, recvline, MAX)) > 0)
 
			recvline[n]=0;
 
		if (fputs(recvline, stdout) == EOF){ 
			perror("fputs error"); 
            		exit(1); 
        	} 
	}
}

avez vous uhne idée merci