Sockets et problème concept
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:
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