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
Partager