Bonsoir
Voilà j'ai fait un programme qui consiste en 1 serveur qui recoit un mot à traduire de la part d'un client.
voilà le programme côté serveur
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
69
70
71
72
73
74
75
76 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <unistd.h> #define PORT 9000 #define TAILLE_QUEUE 1 #define TAILLE_TAMPON 100 void serveurTcp(int st) { int longueurMessageRecu; char mot[TAILLE_TAMPON]; if ((longueurMessageRecu = read(st, mot, TAILLE_TAMPON)) == -1) { printf("Erreur fonction read()\n"); exit(EXIT_FAILURE); } mot[longueurMessageRecu] = '\0'; printf("Longueur message recu : %d\n", longueurMessageRecu); printf("Reception d'une demande de traduction pour le mot : %s\n", mot); } int main(int argc, char *argv[]) { int socketConnection; int socketTransfert; socklen_t longueurAdresseClient; struct sockaddr_in adresseServeur; struct sockaddr_in adresseClient; if ((socketConnection = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf("Erreur fonction socket()\n"); exit(EXIT_FAILURE); } bzero((char *) &adresseServeur, sizeof(adresseServeur)); adresseServeur.sin_family = AF_INET; adresseServeur.sin_port = htons(PORT); adresseServeur.sin_addr.s_addr = INADDR_ANY; if (bind(socketConnection, (struct sockaddr *)&adresseServeur, sizeof(adresseServeur)) == -1) { printf("Erreur fonction bind()\n"); exit(EXIT_FAILURE); } if (listen(socketConnection, TAILLE_QUEUE) == -1) { printf("Erreur fonction listen()\n"); } printf("********** ATTENTE DE DEMANDE DE CONNECTION **********\n\n"); longueurAdresseClient = sizeof(adresseClient); if ((socketTransfert = accept(socketConnection, (struct sockaddr *)&adresseClient, &longueurAdresseClient)) == -1) { printf("Erreur fonction accept()\n"); exit(EXIT_FAILURE); } printf("********** CONNECTION ETABLIE AVEC LE CLIENT **********\n\n"); serveurTcp(socketTransfert); close(socketConnection); return EXIT_SUCCESS; }
et voici le programme côté client
Le souci c'est qu'à l'exécution sur le client, la longueur du message envoye est de 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <unistd.h> #include <arpa/inet.h> char ip[16]; char strPort[6]; int port; void clientTcp(int sc, char *mot) { int longueurMessageEnvoye; if ((longueurMessageEnvoye = write(sc, mot, strlen(mot)) == -1)) { printf("Erreur fonction write()\n"); exit(EXIT_FAILURE); } printf ("Longueur message envoye : %d.\n", longueurMessageEnvoye); printf("Demande de traduction effectuee pour le mot : %s.\n", mot); } void decoupeIpPort(char *ipEtPort) { char strToParse[22]; strcpy(strToParse, ipEtPort); strcpy(ip, strtok(strToParse, ":")); strcpy(strPort, strtok(NULL, ":")); port = atoi(strPort); } int main(int argc, char *argv[]) { int socketClient; struct hostent *he; struct sockaddr_in adresseServeur; struct in_addr addresseTmp; decoupeIpPort(argv[1]); if ((socketClient = socket(AF_INET, SOCK_STREAM, 0)) == -1) { printf ("Erreur fonction socket()\n"); exit(EXIT_FAILURE); } bzero((char *) &adresseServeur, sizeof(adresseServeur)); adresseServeur.sin_family = AF_INET; adresseServeur.sin_port = htons(port); inet_aton(ip, &addresseTmp); if ((he = gethostbyaddr(&addresseTmp, sizeof addresseTmp, AF_INET)) == NULL) { printf("Erreur fonction gethostbyaddr.\n"); exit(EXIT_FAILURE); } adresseServeur.sin_addr = *((struct in_addr *)he->h_addr); if ((connect(socketClient, (struct sockaddr *)&adresseServeur, sizeof(adresseServeur)) == -1)) { printf("Erreur fonction connect()\n"); exit(EXIT_FAILURE); } printf("********** CONNECTION ETABLIE AVEC LE SERVEUR **********\n\n"); clientTcp(socketClient, argv[2]); close(socketClient); return EXIT_SUCCESS; }
pourtant le serveur recoit bien un message de longueur 14 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 exhortae@exhortae-desktop:~/ex1/tcpClient$ ./a.out 192.168.1.33:9000 developpez.com ********** CONNECTION ETABLIE AVEC LE SERVEUR ********** Longueur message envoye : 0. Demande de traduction effectuee pour le mot : developpez.com. exhortae@exhortae-desktop:~/ex1/tcpClient$
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 exhortae@exhortae-desktop:~/ex1/tcpServeur$ ./a.out ********** ATTENTE DE DEMANDE DE CONNECTION ********** ********** CONNECTION ETABLIE AVEC LE CLIENT ********** Longueur message recu : 14 Reception d'une demande de traduction pour le mot : developpez.com exhortae@exhortae-desktop:~/ex1/tcpServeur$
j'ai cherché partout mais je comprends pas ou est le problème.
Partager