Un chat simple en C [C] - C - Programmation
Marsh Posté le 01-04-2004 à 19:21:15
Moi c'est ce que je fais effectivement, dès qu'il y a une connection j'ouvre un thread.
Sinon il faut utiliser select avec un time-out je pense, mais c'est moins pratique.
Marsh Posté le 01-04-2004 à 19:22:14
le problème avec un thread, c'est que je dois passer quoi en argument pour récupérer le socket qui a été ouvert?
Marsh Posté le 01-04-2004 à 19:23:08
passe un pointeur sur une structure avec les données dont tu as besoin.
Marsh Posté le 01-04-2004 à 23:55:09
j'ai essayé de faire
pthread_create(&thread1, NULL, (void*)&thread_serveur, (void*) sock);
mais je crois que j'ai un pb du côté de mon (void*) sock...??
Marsh Posté le 02-04-2004 à 00:09:09
pourquoi tu cast ? si t'as besoin de caster, c'est que tu as un problème
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *),
void * arg);
Marsh Posté le 02-04-2004 à 15:45:28
bon bon j'ai réussi avec les threads... mais maintenant, un autre pb!
Le serveur reçoit bien tout ce que les clients envoient, mais maintenant j'aimerais qu'il renvoi un message à tous les sockets connectés à lui même...
je pensais faire une boucle sur tous les sockets et faire un send à chaque fois, c'est la bonne méthode?
Marsh Posté le 02-04-2004 à 15:53:57
C'est plus simple de le faire par thread, et puis c'est le même code.
Marsh Posté le 02-04-2004 à 17:34:56
oui mais je voudrais envoyer le MEME message à tous... or les thread sont apparement indépendant? Comment faire communiquer des threads entre eux?
Marsh Posté le 02-04-2004 à 18:44:06
Il doit falloir utiliser les Events pour ça, mais je n'en sais pas plus ...
Marsh Posté le 02-04-2004 à 21:22:52
et tu crois pas qu'une boucle sur les sockets serait bien? le pb c'est que dans un thread je peux pas savoir quelles sont les connexions qui ont été ouvertes?
d'autres solutions?
Marsh Posté le 02-04-2004 à 21:36:28
Sinon tu peux envoyer un message dans la structure passé au thread, mais tu n'auras aucun compte rendu
Marsh Posté le 03-04-2004 à 09:12:09
Et bien au lieu de ne passer que la variable sock à ton thread, tu passes un pointeur sur une structure, et dedans tu y mets ta variable socket et une variable message.
Et dans ta boucle de chaque thread tu lis cette variable et s'il y a qqchose tu traites, puis tu remets à 0 par example pour indiquer que c'est pris en compte.
Il faut utiliser les critical section pour éviter de lire/écrire en même temps et ça doit rouler.
Marsh Posté le 03-04-2004 à 21:06:13
une question de newb'... comment on passe plusieurs arguments de types différents à un thread?
Marsh Posté le 03-04-2004 à 21:27:08
Cricri_ a écrit : Passe un pointeur sur une structure ! |
mais il est ou le poste ou j'ai collé une exemple complet ?
Marsh Posté le 03-04-2004 à 21:36:13
Joker chef ..
je fais ce que je peux pour aider le monsieur, je n'ai pas d'autres prétentions ...
vi, l'est où le post ???
Marsh Posté le 03-04-2004 à 21:49:07
oh ben oui il est ou l'exemple?
bon sinon, j'ai un problème pour passer une structure en argument
dans mon proto j'ai
void ouverture_serveur(struct arg_serveur);
et à la compil', devc++ me mets
[Warning] `struct arg_serveur' declared inside parameter list
[Warning] its scope is only this definition or declaration, which is probably not what you want
...
Marsh Posté le 06-04-2004 à 01:15:44
bon bon finalement après trop de galère, j'ai préféré faire une boucle sur mes sockets et ça roule!
Marsh Posté le 06-04-2004 à 08:30:56
Citation : Sinon il faut utiliser select avec un time-out je pense, mais c'est moins pratique. |
c'est bien plus pratique à mon avis
Marsh Posté le 08-04-2004 à 14:36:03
Voilà mon code...
Me reste encore un pb... quand un tous les clients sont déco... le serveur part dans une boucle infinie sur le dernier message!
Code :
|
Marsh Posté le 01-04-2004 à 19:00:27
Salut à tous!
J'ai besoin de faire un chat très simple en ligne de commande en C, avec un serveur et plusieurs clients.
Voilà en gros mon code (inspiré de CPPFrance):
Le problème, c'est que quand un nouveau client vient se connecter, le serveur est déjà dans sa boucle infinie en attendant de reçevoir des infos du premier client.
Comment je peux faire pour séparer les différents clients?
Je suis sous windows, je dois utiliser des threads?