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

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;
}
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
 
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$
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
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.