|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
Bonjour!
bon alors voila, je souhaiterai que mon serveur puisse accepter plusieurs connexions de client en meme temps mais je ne sais pas trop comment faire... est ce que le fait d'avoir mis : suffit...? ou il faut que je fasse autre chose (je pense à un fork par exemple...) deuxième petite question : je souhaiterai que mon client envoie au serveur des messages toutes les 50 ou 200ms pendant une durée définie par moi.... est ce possible et comment faut il que je procède...?? merci par avance pour vos réponses cdlt |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Raymond Inscription : mai 2007 Messages : 9 241 ![]() |
C'est bon, après, il suffit de faire accept
Code :
le thread principal fait le socket(), bind(), listen(), accept() Lorsqu'un client se connecte, le thread principal créé un nouveau thread qui va s'occuper exclusivement de ce nouveau socket client et le thread principal retourne dans la boucle infinie accept(). En final, tu as un thread pour le socket serveur et un thread par socket client qui se suicide lorsque le socket client est fermé. C'est parfaitement gérable pour quelques socket, après, il faut peut être revoir le schéma général (un thread, cela coute cher !!).
__________________
Raymond Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi ![]() Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.e-verbe Un logiciel de conjugaison des verbes de la langue française.Ma page personnelle sur DVP. |
||
|
|
00
|
|
|
#3 | |
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
Citation:
-> Côté serveur, t'utilise une durée max d'attente dans un select avant la lecture des données. |
|
|
|
00
|
|
|
#4 | ||
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
merci beaucoup pour vos réponses rapides !!
ok donc en gros, sans que je le sache, mon serveur pouvait déjà accepter plusieurs clients... quand tu dis qu'un thread coute cher, si j'ai genre une centaine de client, qu'est ce que je peux mettre en place comme solution pour pas que ca soit trop couteux?? et pour le timer j'utilise un truc du genre ca coté client : Code :
et coté serveur par contre... j'ai pas tout compris... |
||
|
|
00
|
|
|
#5 | |
![]() ![]() ![]() Raymond Inscription : mai 2007 Messages : 9 241 ![]() |
Citation:
IOCP est une techno Windows qui permet de faire des appli utilisant beaucoup de socket très performantes.
__________________
Raymond Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi ![]() Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.e-verbe Un logiciel de conjugaison des verbes de la langue française.Ma page personnelle sur DVP. |
|
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
mince... je suis sous linux...
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Raymond Inscription : mai 2007 Messages : 9 241 ![]() |
Ceci dit, je pense qu'il y a quand même des solutions mais je ne les connais pas
__________________
Raymond Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi ![]() Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.e-verbe Un logiciel de conjugaison des verbes de la langue française.Ma page personnelle sur DVP. |
|
|
00
|
|
|
#8 | |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
ok je vais chercher...
par contre ca : Citation:
|
|
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
Cherche dans la doc des socket le select. Cela te permet de résoudre tes deux problèmes:
Côté serveur 1 thread en écoute des connexions clients 1 thread pour tous les clients connectés. Le select permet de se mettre en attente d'évènement sur plusieurs socket en même temps et de sortir de cette attente sur: soit un timer, soit il se passe quelque chose sur une ou plusieurs sockets (bien sûr tu sait lesquelles). Je connais pas linux mais il doit bien y avoir un interface pour gérer des timers? Ce sera toujours mieux que ton Sleep pas très performant. |
|
|
00
|
|
|
#10 | |
![]() ![]() Inscription : décembre 2003 Messages : 14 505 ![]() |
Citation:
http://emmanuel-delahaye.developpez.com/reseaux.htm http://emmanuel-delahaye.developpez.com/pthreads.htm
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
|
|
|
00
|
|
|
#11 | |||
![]() ![]() Inscription : décembre 2003 Messages : 14 505 ![]() |
Citation:
Il faut utiliser les suspensions passives de ton système comme Sleep(ms) pour Windows ou sleep(s) et usleep(µs) pour Linux. Ceci peut aider : http://delahaye.emmanuel.free.fr/clib/psleep/
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
|||
|
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
merci! je potasse tout ca et je vous réembeterai si je coince sur un truc
|
|
|
00
|
|
|
#13 | |||
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
bien le bnsoir...
Code :
j'avais fait un cas ou on avait time out et il me fait Citation:
|
|||
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 307 ![]() |
bonjour,
forte ou faible la n est pas la question... la le break fait "sortir" du switch/case je te propose de remplacer ta boucle for par un while( mon_booleen == TRUE ) et de setter ce mon_booleen a FALSE dans ton case qui va bien. pour les booleen au cas ou : Code :
__________________
"vaste programme" |
||
|
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
![]() je tape comme mes pieds...merci beaucoup, ca fonctionne ^^ |
|
|
00
|
|
|
#16 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
autre question (peut etre supide mais on est vendredi ^^):
comment est-ce-que je peux tester que mon serveur accepte plusieurs connexions de différents clients en meme temps...? |
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 307 ![]() |
ben tu lances plusieurs fois ton client.
Reponse un peu con, mais la question est vague, je connais pas ton environnement et toussa quoi, ce qui te bloque... Le seul truc qui pourrait etre chiant c est si tu n autorises qu une seul connexion par IP dans ce cas faut 2 cartes reseaux
__________________
"vaste programme" |
|
|
00
|
|
|
#18 |
|
Membre à l'essai
![]() Inscription : mars 2007 Messages : 175 ![]() |
ok je suis sous linux
donc en fait ce que j'ai fait et qui ne marche pas : je lance mon serveur qui attend la connexion. ensuite j'ai mis un sleep dans mon client1 juste avant d'envoyer les données, pendant ce temps je lance le client 2 et il me dit connexion refusée... du coup soit c'est mon truc qui n'st pas bon, soit je coince... |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 307 ![]() |
ton serveur est bien prevu pour recevoir plusieurs connexions ?
[pseudo algo du dredi] tant que serveur actif attente de connexion sur connexion lancement thread communication avec le client fin tant que [/pseudo algo du dredi] bon le thread est optionnel, on peut s en tirer avec une ecoute non bloquante mais ca devient plus chaud/lourd a gerer. Vois tu ce que je veux dire ? si ton code est pas trop gros post le.
__________________
"vaste programme" |
|
|
00
|
|
|
#20 |
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
L'erreur classique c'est d'oublier setsockopt avec REUSEADDR. Cela te permet de lancer plusieurs client avec le même couple adresse IP;Port TCP/UDP sur la même machine.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com