Bonjour,
J'ai 2 problèmes à vous soumettre en cette belle matinée de fin de semaine.
Tout d'abord une brève introduction à mon but : j'essaie pour le moment de faire un serveur qui accepte toutes le connexions sur le port X pour ensuite utiliser ces connexions pour un chat.

Donc mon premier problème est un problème de 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
46
47
48
49
 
typedef struct
{
        SOCKET socket;
        SOCKADDR_IN sin;
        char nom[255];
        int connexion; 
        int position_x;
        int position_y;       
} client;
 
int main(int argc, char *argv[])
{
    WSADATA WSAData; // sert simplement à dire au système que l'on va utiliser des socket
    SOCKET sock; // initialisation d'un socket
    SOCKADDR_IN sin; // informations techniques du socket
    int socket_accept = 0; // valeur de retour du accept()
    char buffer[255]; // réception sur le socket
    client *clients;
    long nombre_clients = 0;
    //clients = malloc(sizeof(client)); // on créé juste une place pour le moment
 
    WSAStartup(MAKEWORD(2,0), &WSAData); // initialisation du WSA
    sin.sin_addr.s_addr = htonl(INADDR_ANY); // serveur, donc pas de destination
    sin.sin_family  = AF_INET; // type de socket
    sin.sin_port  = htons(54321); // port d'écoute
    sock = socket(AF_INET,SOCK_STREAM,0); // création du socket
    bind(sock, (SOCKADDR *)&sin, sizeof(sin)); // lien entre le port/adresse et le socket
 
    listen(sock,0); // écoute sur le socket sock sans limite du nombre de connexions
    printf("En ecoute...\n");
    while(1)
    {
            nombre_clients++;
            clients = realloc(clients, nombre_clients * sizeof(client));
            int sinsize = sizeof(clients[nombre_clients-1].sin);
            if (clients[nombre_clients-1].socket = accept(sock, (SOCKADDR *)&clients[nombre_clients-1].sin, &sinsize) != INVALID_SOCKET)
      {
                  printf("Accepte depuis %s\n", inet_ntoa(clients[nombre_clients-1].sin.sin_addr));
                  recv(clients[nombre_clients-1].socket,buffer,255,0);
                  printf("%s", buffer);
      }
    }
 
    getch();
    closesocket(sock);
    WSACleanup(); // Nettoyage du WSA 
    return 0;
}
Donc en gros j'ouvre ma connexion sur socket et j'écoute. Ensuite, a peine je reçois une connexion, j'aimerais enregistrer ce client sous clients[i].socket pour pouvoir traiter chaque client séparément. Je ne sais pas si c'est comme ça qu'il faudrait faire.

Ensuite ma 2ème question : Pour gérer simultanément les actions des clients et les nouveaux clients qui arrivent, je dois utiliser des theads ???

Merci d'avance pour votre aide