Accueil > Forum > > > > Thread et serveur UDP
Thread et serveur UDP
dimanche 29 octobre 2006 à 22:32:50 |
Thread et serveur UDP

nico971gwada
|
Salut, J'ai fait une IHM qui doit démarrer un serveur UDP à partir de l'appuie sur un bouton. Puis en réapuyant sur ce même bouton je voudrais arreter le serveur. J'ai donc créer un thread pour mon serveur. A l'intérieur de la fonction "run" j'ai une boucle "while(true)" qui attend qu'un message arrive sur ma socket : while(true) { count = socket_udp->ReceiveFrom(buffer_reception,_port_distant); ....... } Le truc c'est que je n'arrive pas à arreter mon thread correctement car quand je fais monThread->abort() suivi de monTread->Join(), ma fenetre se fige et plus rien ne marche. Je crois que c'est dû à ma boucle while. J'ai essayé de remplacer le "true" par un booléen que je passe à false lorsque j'essaie d'arreter mon Thread mais ça ne marche pas non plus. Je ne sais pas quoi faire. Help....!
|
|
dimanche 29 octobre 2006 à 22:41:51 |
Re : Thread et serveur UDP

vecchio56
|
Ton problème est peut être lié au fait que la fonction ReceiveFrom soit bloquante. Il faudrait trouver un moyen d'ajouter un timeout, ce qui te permettrait d'utiliser un booléen dans ta boucle. Sinon, tu va être obligé de tuer simplement le thread, même si c'est déconseillé de le faire _____________________________________ Un éditeur de ressources gratuit pour Windows
|
|
dimanche 29 octobre 2006 à 23:01:01 |
Re : Thread et serveur UDP

nico971gwada
|
Salut Vecchio.
Je suis un peu nul en c++ donc faudrait que tu m'expliques quelques petits trucs. Si j'ai bien compris, le timeout servirait à "relancer" ma boucle while et donc à ré-évaluer mon booléen. Question:: comment on fait??? Sinon qu'entends-tu par "tuer simplement"? Si c'est faire un monThread->abort(), j'ai déjà essayé et ça n'arrive pas à tuer mon thread.
Merci d'avance pour tes précisions.
|
|
lundi 30 octobre 2006 à 11:53:08 |
Re : Thread et serveur UDP

julienbj
|
Pour fermer ton thread proprement en réévaluant ton booléen, il faut que tu fermes ta socket. Ceci forcera ton ReceiveFrom à renvoyer une erreur de lecture, et tu pourras sortir de ta boucle while. J'ai mis un exemple avec les fonctions recvfrom et sendto ici.Le fichier qui devrait t'intéresser est network.c. Tu trouveras dedans un thread qui écoute en permanence sur sa socket. Lorsque je quitte le programme, je ferme la socket ce qui entraine la fermeture du Thread. Vive le C Savon
|
|
lundi 30 octobre 2006 à 14:18:56 |
Re : Thread et serveur UDP

nico971gwada
|
J'ai essayé la solution de vecchio qui consiste à mettre un timeout (socket_udp->ReceiveTimeout = 5000) et donc toute les 5 secondes cela déclanche une SocketException que je catch dans mon while et ça relance la boucle et par conséquent l'évaluation de mon booléen. ça marche donc nickel mais cette solution ne semble pas satisfaire mes profs qui disent qu'il doit y avoir une façon de forcer l'arret du thread sans passer par un timeout. Je vais donc essayer la solution de julienbj (en fermant ma socket). Sinon vecchio56 si tu as des précision à m'apporter quand tu disais "tuer simplement" je suis preneur...
Merci à tous les deux.
|
|
lundi 30 octobre 2006 à 14:25:59 |
Re : Thread et serveur UDP

vecchio56
|
Ca dépend comment tu gères tes threads Moi je fais avec CreateThread (librairie Win32) Avec un TerminateThread, le thread si termine Mais partout on te dira que c'est dangereux de terminer un thread comme ca Tu peux regarder par exemple dans la MSDN: " TerminateThread is a dangerous function that should only be used
in the most extreme cases" Dans la JavaDoc, idem: la méthode stop de Thread est deprecated Pour la solution de julienbj, tu peux pas l'appliquer vu que tu est bloqué dans par le ReceiveFrom (a moins que tu ne souhaites la fermer depuis l'autre thread) _____________________________________ Un éditeur de ressources gratuit pour Windows
|
|
lundi 30 octobre 2006 à 14:39:49 |
Re : Thread et serveur UDP

julienbj
|
Oui, c'est sur qu'avec la solution que je propose, ce doit etre à partir d'un autre thread que tu demandes la fermeture du thread dans lequel tu es bloqué, puisque justement tu es bloqué dedans. Mais ceci est au meme titre que ta solution Vecchio, pour tuer le Thread qui est bloqué sur la lecture, tu dois etre dans un autre Thread. Moi ce que je propose, c'est que dans cet autre thread, au lieu de faire un TerminateThread, tu fasses un closesocket et tu passes le booléen de scrutation de la boucle while à faux. Vive le C Savon
|
|
lundi 30 octobre 2006 à 14:56:56 |
Re : Thread et serveur UDP

vecchio56
|
Logiquement on devrait pas pouvoir fermet la socket, vu qu'elle est en train d'être utilisée par ReceiveFrom (de la même manière qu'on ne devrait pas pouvoir fermer un fichier pendant qu'on est en train de le lire). Ca peut peut-être marcher, j'ai jamais essayé, mais si ca se trouve on aura des résultats différents selon le système _____________________________________ Un éditeur de ressources gratuit pour Windows
|
|
lundi 30 octobre 2006 à 16:26:30 |
Re : Thread et serveur UDP

julienbj
|
Réponse acceptée !
Voila ce que me dit mon MSDN (vieille version puisque encore compatible avec le F1 sous VC6) The closesocket function closes a socket. Use it to release the socket
descriptor s so further references to s will fail with the error
WSAENOTSOCK. If this is the last reference to an underlying socket, the
associated naming information and queued data are discarded. Any pending
blocking, asynchronous calls issued by any thread in this process are canceled
without posting any notification messages La fin veut bien dire ce qu'elle veut dire: Tout ce qui est en attente bloquante est annulé. Il faudrait aller voir sous Linux dans les man si c'est la même chose mais en tout cas sous windows, ca fait bien ce que l'on souhite que ca fasse. Vive le C Savon
|
|
lundi 30 octobre 2006 à 17:21:59 |
Re : Thread et serveur UDP

nico971gwada
|
ça marche!!!!! Bon je trouve que ça fait un peu bricolage et j'espère que mes profs ne vont pas gueuler mais en tout cas ça marche. Merci a tout les deux
Ps: une question qui n'a pas grand chose à voir : Comment on poste correctement du code dans un message (bien formaté comme dans les exemples de code du site) si c'est possible, et est-ce que l'un d'entre vous se dévouerait pour regarder mon code car je suis sûr que j'ai fais une grosse tambouille pas très pro. Voilà. Merci d'avance...
|
|
Cette discussion est classée dans : serveur, while, thread, arreter, udp
Répondre à ce message
Sujets en rapport avec ce message
Passer des arguments à un Thread & framework 2.0 [ par nico971gwada ]
Salut,Je dois faire une interface graphique qui permet de s'échanger des fichiers xml.Sans trop rentrer dans les détails je dois faire 2 serveur UDP é
Arreter un thread [ par tibob51 ]
<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB
Thread [ par joduak ]
Salut!Je souhaiterais savoir si, quand j'exécute un thread (fonction thread2) à l'intérieur d'un thread (fonction thread1)est ce que le thread (foncti
Thread, Client/Serveur VC++.Net et avec WinForms ( pas d'MFC ) [ par lacousine ]
Bonjour,j'ai développé un serveur qui accept plusieurs clients avec des sockets. Voici mes problèmes: lorsque je veux mettre fin à mon serveur et qu'i
perte de paquets UDP dans un thread quand l'autre thread fait un write() [ par fabricius ]
Hello,Voila mon problème, ca fait bien une semaine que je suis dessus...J'ai écrit un soft qui écoute une socket UDP, qui reçoit des paquets et qui le
Client UDP avec CAsyncsocket [ par underdog08 ]
Bonjour,Je doit réaliser une communication client serveur UDP en mfc avec CAsyncsocket, je suis débutant en programmation et j'ai difficilement réussi
Thread & Socket [ par katerson ]
Bonjour tout le monde! Je travaille actuellement sur un projet serveur/client sur UDP. Mon serveur comporte 3 threads qui doivent scruter (indépenda
Arreter la boucle avec ENTER [ par vlavin ]
Bonjour a tous. j'ai une condition while(i<TAILLE)||(???) comment on fait pour que la deuxieme condition dans while soit une frappe sur la touche EN
Meilleur solution pour serveur MMORPG. [ par LA_Tupac ]
Bonjour à tous! voila ma question: Je développe actuellement mon premier jeu en réseau. Le socket d'envoi du client est en tcp et le socket d'envoi du
Arreter un thread [ par romauto750 ]
Bonjour à tous,J'aurai aimé savoir comment on faisait pour arrêter un thread. Je m'explique :J'ai une fonction qui appelle un thread, cependant le cod
Livres en rapport
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|