Bonjour,

Je suis entrain de coder un petit chat avec une partie cliente et une partie serveur.
J'ai déjà tout codé, mais ma partie cliente n'arrive pas à ce connecter à mon serveur et je ne comprends pas pourquoi.

Voici mes codes :

SERVEUR.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <unistd.h>
 
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
 
#include <sys/types.h>
#include <sys/socket.h>
 
#define BUFFER_SIZE 256
 
int cree_socket_tcp_ip()
{
  int sock;
  struct sockaddr_in adresse;
 
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  {
    fprintf(stderr, "Erreur socket\n");
    return -1;
  }
 
  memset(&adresse, 0, sizeof(struct sockaddr_in));
  adresse.sin_family = AF_INET;
  // donner un num�ro de port disponible quelconque
  // adresse.sin_port = htons(0);
  // aucun contr�le sur l'adresse IP :
   //adresse.sin_addr.s_addr = htons(INADDR_ANY);
 
  // Autre exemple :
  // connexion sur le port 33016 fix�
  adresse.sin_port = htons(33016);
  // depuis localhost seulement :
  inet_aton("127.0.1.1", &adresse.sin_addr);
 
  if (bind(sock, (struct sockaddr *)&adresse,
           sizeof(struct sockaddr_in)) < 0)
  {
    close(sock);
    fprintf(stderr, "Erreur bind\n");
    return -1;
  }
 
  return sock;
}
 
int affiche_adresse_socket(int sock)
{
  struct sockaddr_in adresse;
  socklen_t longueur;
 
  longueur = sizeof(struct sockaddr_in);
  if (getsockname(sock, (struct sockaddr *)&adresse, &longueur) < 0)
  {
    fprintf(stderr, "Erreur getsockname\n");
    return -1;
  }
  printf("IP = %s, Port = %u\n", inet_ntoa(adresse.sin_addr),
         ntohs(adresse.sin_port));
  return 0;
}
 
void traite_connection(int sock)
{
  struct sockaddr_in adresse;
  socklen_t  longueur;
  char bufferR[BUFFER_SIZE];
  char bufferW[BUFFER_SIZE];
  char tmp[50];
  int nb;
 
  longueur = sizeof(struct sockaddr_in);
  if (getpeername(sock, (struct sockaddr*) &adresse, &longueur) < 0)
    {
      fprintf(stderr, "Erreur getpeername\n");
      return;
    }
  sprintf(bufferW, "IP = %s, Port = %u\n",
          inet_ntoa(adresse.sin_addr),
          ntohs(adresse.sin_port));
  printf("Connexion : locale (sock_connectee) ");
  affiche_adresse_socket(sock);
  printf("   Machine distante : %s", bufferW);
  strcat(bufferW, "Votre adresse : ");
  affiche_adresse_socket(sock);
  strcat(bufferW, tmp);
 
  strcat(bufferW, "Veuillez entrer une phrase : ");
  write(sock, bufferW, BUFFER_SIZE);
  nb= read(sock, bufferR, BUFFER_SIZE);
  printf("L'utilsateur distant a tap� : %s\n", bufferR);
  sprintf(bufferW, "Vous avez tap� : %s\n", bufferR);
  write(sock, bufferW, BUFFER_SIZE);
}
 
int main(void)
{
  int sock_contact;
  int sock_connectee;
  struct sockaddr_in adresse;
  socklen_t longueur;
  pid_t pid_fils;
 
  sock_contact = cree_socket_tcp_ip();
  if (sock_contact < 0)
    return -1;
  listen(sock_contact, 5);
  printf("Mon adresse (sock contact) -> ");
  affiche_adresse_socket(sock_contact);
  while (1)
  {
    longueur = sizeof(struct sockaddr_in);
    sock_connectee = accept(sock_contact,
                            (struct sockaddr *)&adresse,
                            &longueur);
    if (sock_connectee < 0)
    {
      fprintf(stderr, "Erreur accept\n");
      return -1;
    }
    pid_fils = fork();
    if (pid_fils == -1)
    {
      fprintf(stderr, "Erreur fork\n");
      return -1;
    }
    if (pid_fils == 0)
    { /* fils */
      close(sock_contact);
      traite_connection(sock_connectee);
      exit(0);
    }
    else
    {
      close(sock_connectee);
    }
  }
  return 0;
}

CLIENT.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
 
#include <sys/types.h>
#include <sys/socket.h>
 
#define BUFFER_SIZE 256
 
int cree_socket_tcp_client(int argc, char** argv)
{
  struct sockaddr_in adresse;
  int sock;
 
  if (argc != 3)
    {
      fprintf(stderr, "Usage : %s adresse port\n", argv[0]);
      exit(0);
    }  
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
      fprintf(stderr, "Erreur socket\n");
      return -1;
    }
 
  memset(&adresse, 0, sizeof(struct sockaddr_in));
  adresse.sin_family = AF_INET;
  adresse.sin_port = htons(atoi(argv[2]));
  inet_aton(argv[1], &adresse.sin_addr);
 
  if (connect(sock, (struct sockaddr*) &adresse, 
           sizeof(struct sockaddr_in)) < 0)
  {
    close(sock);
    fprintf(stderr, "Erreur connect\n");
    return -1;
  }
  return sock;
}
 
int affiche_adresse_socket(int sock)
{
  struct sockaddr_in adresse;
  socklen_t longueur;
 
  longueur = sizeof(struct sockaddr_in);
  if (getsockname(sock, (struct sockaddr*)&adresse, &longueur) < 0)
    {
      fprintf(stderr, "Erreur getsockname\n");
      return -1;
    }
  printf("IP = %s, Port = %u\n", inet_ntoa(adresse.sin_addr),
         ntohs(adresse.sin_port));
  return 0;
}
-
int main(int argc, char**argv)
{
  int sock;
  char buffer[BUFFER_SIZE];
  sock = cree_socket_tcp_client(argc, argv);
  if (sock < 0)
    {
      puts("Erreur connection socket client");
      exit(1);
    }
  affiche_adresse_socket(sock);
  while(1)
    {
      if (read(sock, buffer, BUFFER_SIZE)==0)
        break;
      puts(buffer);
      if (fgets(buffer, BUFFER_SIZE, stdin) == NULL)
        break;
      buffer[strlen(buffer)-1] = '\0';
      write(sock, buffer, BUFFER_SIZE);
    } 
  return 0;
}
Je suis preneur de toute solutions, merci d'avance...