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

SDL_Net : Connecter plusieurs clients

Glosoli
Glosoli
Niveau 10
27 mars 2013 à 06:36:42

Oyo le fofo

Utilisant SDL_Net avec SDL, je souhaite réaliser quelque chose d'à priori simple : Connecter deux clients sur un serveur. Sur chaque client on peut déplacer un petit carré (un SDL_Rect que j'envoie, qui contient deux nombres : un x et un y pour la position)

Bref, j'arrive déjà à en faire avec un seul, mais je ne vois pas comment créer un deuxième client pour le différencier de l'autre. Et si je voulais même en connecter 3, 4 ?

Dois-je les différencier par rapport à leur taille ? A leur position ? Par rapport à l'IP ? (Ah tiens j'y avais pas pensé :hap: )

je post tout de même, je continue de voir ça :oui:

godrik
godrik
Niveau 30
27 mars 2013 à 07:21:11

quand tu fais des socket tcp, tu passe des TCPsocket aux fonctions sdlnet_tcp_recv et sdlnet_tcp_send. Il suffit de faire plusieurs appels a sdlnet_tcp_accept sur le serveur pour obtenir plusieur TCPsocket.

Glosoli
Glosoli
Niveau 10
31 mars 2013 à 07:08:49

Oui mais comment tu fais pour les différencier ?

Je dois trouver une fonction pour les différencier à l'ip ? Par rapport au port ? Car tout ce que j'arrive c'est avec le port, j'ai mon pote par hamachi qui a un certain port avec une resolvehost à ce port, et moi en local avec un deuxième resolvehost avec un autre port, moi je déplace le carré jaune que j'ai crée (sur le serveur donc) et lui déplace le carré rouge, mais ils ont tous deux la même position (on gère le même, mais il arrive à différencier quel port et donc la couleur, mais pas la position :snif: )

Glosoli
Glosoli
Niveau 10
31 mars 2013 à 07:14:51

Ah c'est bon j'ai trouvé, c'était un souci de blit, en gros j'ai simplifié le programme et tout marche ! C'est parfait c'est le plus beau jour de ma vie omg :cute:

Glosoli
Glosoli
Niveau 10
02 avril 2013 à 21:58:37

D'ailleurs, j'ai pas mal de soucis pour faire tourner la boucle principale du serveur : j'aimerais bien qu'il blit les deux personnages juste après les avoir "scanné" aussi en même temps, mais j'ai du mal à intégrer deux paramètres (csd qui est un pointeur) dans un if ou dans un while, du coup lorsqu'un se déplace, l'autre est un peu saccadé..

http://pastebin.com/5GsSeD9x

Je sais que c'est rudimentaire mais je tente de capter le système un peu

Et je voulais savoir si vous aviez des ports "conseillés" ? Je sais qu'entre plusieurs plages de ports ils ont plus ou moins une spécificité ? Je suis actuellement sur 1234 (ce que je croise le plus souvent)

Merci :ange:

godrik
godrik
Niveau 30
02 avril 2013 à 22:32:53

Il ne faut pas etablir la connexion a chaque tour de boucle. Il faut l'etablir au debut et une fois pour toute.

Glosoli
Glosoli
Niveau 10
03 avril 2013 à 20:37:52

godrik :d) J'essaie ça

PommesCarrotes :d) Mais en fait le client doit lui aussi agir comme serveur non ? Puisqu'il doit lui aussi afficher l'autre joueur, il doit recevoir ?

godrik
godrik
Niveau 30
03 avril 2013 à 21:01:27

Les socket sont bidirectionnelle hein! Tu peux lire et ecrire dessus. :)

Glosoli
Glosoli
Niveau 10
03 avril 2013 à 21:23:07

Oh tu allumes la lanterne là godrik ! Je vais m'y intéresser de suite ! Ca marche aussi avec un send depuis le serveur et je peux receiv avec le client ?

Glosoli
Glosoli
Niveau 10
11 avril 2013 à 04:38:59

J'ai un souci ici

J'ai recrée un serveur qui jouera son propre rôle (pas d'affichage donc) :d)

http://pastebin.com/AAAJ9FXV

Il servira à recevoir la position du personnage 1 et de la renvoyer sur le même client mais qui sera un autre SDL_Rect (pour simuler un deuxième client) qui s'enregistrera dans un fichier sur le client. Je n'ai pas de souci au niveau du serveur.

C'est surtout au niveau du client :d) http://pastebin.com/MzJUxtBP

Comme dit, j'initialise le tout blabla et j'entre dans une boucle. Tu m'as dis godrik que les sockets sont bidirectionnelles, mais à travers quoi ? A travers le TCP_Accept ? Le TCP_Open ?

D'ailleurs, c'est le TCP_Open que je n'arrive pas du tout à caser dans le code, et que dans ma boucle je puisse actualiser à chaque tour de boucle le TCP_Recv ou bien dès qu'il bouge. Si je mets le TCP_Open avant la boucle il ne me met sur le serveur qu'une connexion seulement (avec la position), comme si la connexion se fermait juste après.

Enfin bref, si vous ne m'avez pas compris, faites en sorte que le client fonctionne, ou proposez-moi quelque chose que je n'ai pas encore testé..

Merci ! :ange:

Glosoli
Glosoli
Niveau 10
17 avril 2013 à 18:41:07

Up !

tbop2
tbop2
Niveau 10
17 avril 2013 à 23:46:31

Un socket ne s'ouvre et ne se referme "qu'une fois" ce n'est pas la partie la plus compliquée. Je pense que tu ne comprends pas comment cela fonctionne. Je te renvois à cet article d'IBM plutôt pas trop mal avec un bon diagramme événementiel : http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzab6%2Fhowdosockets.htm

Il faut voir ça exactement comme un appel téléphonique.
Il faut ouvrir la connection, pour cela il faut le numéro.
Une fois que c'est ouvert toi tu sais quand est-ce que tu veux parler (send) mais tu ne sais jamais quand est-ce que l'interlocuteur va répondre (receive). C'est pour ça qu'il faut que tu fasses appel à un thread en parallèle qui écoutera en permanence les messages entrants.
A la fin de la communication tu raccroches, une fois, tu fermes le socket ici.

C'est pas simple la programmation socket mais c'est pas non plus sorcier sorcier d'avoir une petite architecture client-serveur naïve. Je te conseille cependant de ne travailler qu'avec les sockets dans un premier temps. De faire un petit chat. Tu as un serveur chat et plusieurs clients qui peuvent chatter entre eux. Tu fais tout en ligne de commande dans la communication et rien d'autre. Comme ça tu pourras comprendre les sockets sans t'embêter avec les concepts de la SDL en parallèle.

Bon courage !

godrik
godrik
Niveau 30
18 avril 2013 à 00:22:37

"Une fois que c'est ouvert toi tu sais quand est-ce que tu veux parler (send) mais tu ne sais jamais quand est-ce que l'interlocuteur va répondre (receive)."

tbop2 a raison dans le sens ou l'interlocuteur peut repondre a n'importe quel moment. Cependant dans beaucoup de protocole reseau qui explicite qui est cense parler ensuite. Tu peux voir ca comme le "over" des talkies walkies.

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