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