CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Win 32APi] Problème de thread et Winsock

salaliche
salaliche
Niveau 5
26 avril 2016 à 21:59:56

Bonsoir (c'est encore moi ^^),
Je viens vers vous car j'ai un petit problème concernant mon application qui tourne sous Win32 api avec Winsock(oui je l'avoue que c'est un peu vieux ,mais cela a l'avantage d'être portable partout)

Bref, j'ai un serveur multiclient qui doit pouvoir envoyer le message textuelle "marche" si je clique sur le bouton marche et arrêt si je clique sur le bouton arrêt ,mon multiclient sera mis sur un thread . Or mon programme marche 1 fois sur 2 : soit il ne se passe rien ,soit j'envoie bien marche mais dès que je veux ré-appuyer sur marche ou arrêt rien ne se passe . Je sèche un peu la, j'ai pensé au début que c'était le "PeekMessage" (pour récupéré le message) qui était mal placé, je l'ai bougé ailleurs mais rien n'y fait.
Je ne pense pas que mon multiclient soit faux mais je peut me trompé.
Bref si quelqu'un pourrait me donner un piste sur mon problème ,je le remercierai beaucoup.
Je précise que mon IDE est code::Block 13.12
Voici le code du thread
http://pastebin.com/AGEzHi8C
Et celui des boutons
http://pastebin.com/feQ7tFzV
Je vous remercie d'avance pour vos réponse

Message édité le 26 avril 2016 à 22:00:11 par salaliche
godrik
godrik
Niveau 30
27 avril 2016 à 05:59:56

La, a froid c'est un peu difficile. Mais il y a un appel a getpeername et un appel a send pour lesquels tu ne testes pas les valeures de retour.

note que tu as un 30 hardcode dans le code au liue d'utiliser max_clients.

Je ne sias pas bien ce que fais select dans le cas ou aucun des file descriptor n'est valide et qu'il n'y a pas de timeout. La doc de select ne me parait pas completement clair dans ce cas la.

Aussi j'ai l'impression que le peekmessage n'est execute dans dans le cas ou il y a une lesture sur le FD du server socket. Et ca a l'air bizarre comme semantique.

salaliche
salaliche
Niveau 5
27 avril 2016 à 19:52:25

@godrik
Merci pour ta réponse ,j'ai rajouter la valeur de retour et le time out.
Problème toujours la.
Je ne suis pas sur de bien comprendre quand tu dit que peekmessage est lu que si il il ya lecture de FD
Mon but est bien d'envoyer le message "marche" ou "arret" a tous les clients dès que je clique sur le bouton.
C'est étrange ,lors de l’exécution dès que je clique sur le bouton ,je dois attendre que le client ait envoyer quelque chose pour que le message s'envoie et s"affiche ,moi je veux qu'il s'envoie sans attendre.
Le peekmessage est mis après que le accept soit fait car pour moi cela me semble bon (je peut me trompé)
Merci d''avance pour les réponse

godrik
godrik
Niveau 30
27 avril 2016 à 19:56:26

tu as un probleme d'ordre des choses.
Regardes le cas a 1 seul client.
Si le client emet la connexion TCP et que le server entre dans le test "if (FD_ISSET(master , &readfds))" avant que l'utilisateur clique sur le bouton, alors le peekmessage sera vide et rien ne sera jamais envoye a ce client la.

Ce que tu veux est avoir le peekmessage comme un evenement de ta boucle d'evenement au meme titre qu'une communication reseau ou autre.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment