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;
} | 
Partager