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

[C/Sockets]Question importante..

Vengeur41
Vengeur41
Niveau 10
11 mai 2005 à 17:03:08

Salut,
Je suis en train de faire un petit morpion online avec SDL et les Sockets.
Je précise que c´est sous Linux ( Ubuntu) que ca se passe ( même si ca doit être la meme chose sous Windows).
Mais j´y connais pas grand chose en prog réseaux, je sais juste envoyer et recevoir des char* au serveur et avec un seul client en TCP.
J´aimerais tout de même savoir, si je veux faire ca avec un serveur multi-clients, ils se connectent tous sur le même port ? Si oui, comment identifier de quel client vient chaque message ( j´ai une idée là dessus mais bon...) ?

Merci d´avance de vos réponses :)

++
Vengeur

JeanYvesYves
JeanYvesYves
Niveau 10
11 mai 2005 à 17:11:15

Si tu utilises TCP, tu as un port d´écoute, et de s qu´un client se connecte, c´est la commande " accept" du serveur qui te renvoie une autre socket :

il y a donc une socket d´écoute, et ensuite chaque client se voit attribuer sa propre socket

Le seul petit tuto que j´ai fait est sur mon site, chapitre J : c´est un mini.chat

Orienté pour Windows, l´adapeter pour Linux est tres simple :

tu remplaces l´inclusion de windows.h par unistd.h, et l´inclusion de winsock2.h par socket.h

tu supprimes également les fonctions qui commencent par WA.... et les fonctions tout en majuscules qui sont des macros windows.

Vengeur41
Vengeur41
Niveau 10
11 mai 2005 à 17:22:24

Oui j´avais vu ton tuto, ca m´avait vraiment interessé :)

Mais quand un client se connecte sur le socket d´entrée, comment on l´accepte sur un autre socket ?

JeanYvesYves
JeanYvesYves
Niveau 10
11 mai 2005 à 17:28:19

C´est automatique :
regarde mon programme " serveur" sur mon site :

Je cree uen socket qui s´appelle sock :
cette socket est la socket d´écoute.

Je cree une autre socket que j´appelle " val"

et je dis :
val = accept(sock, ( SOCKADDR *)&, &);

val sera la nouvelle socket du client.
Le principe, c´est de faire un thread qui écoute en permanence, et donc qui reste bloqué sur le " accept"
quand le accept te rend la main, il te renvoie une nouvelle socket, ça veut dire que tout seul, il attend un client, si un client arrive, il lui alloue une socket et te renvoie son identifiant " val" dans le cas de mon prog.

En mode TCP, tout cela est automatique :)
Si tu veux en accepeter plusieurs, tu fous le accept dans un while, et, toujours dans le while, derriere le accept, tu controles le code de retour, si ce n´est pas un type INVALID_SOCKET, alors tu crees une instance pour le client, en marquant dans ses données propres la valeur de " val", qui sera sa socketr pour communiquer.

Vengeur41
Vengeur41
Niveau 10
11 mai 2005 à 18:41:20

Je crois que j´ai compris.
Ca correspond à quoi sous linux le pointeur SOCKADDR ?

JeanYvesYves
JeanYvesYves
Niveau 10
11 mai 2005 à 18:44:45

un truc ressemblant.
Fait un :

man accept

sous la console de nunux pour voir quels sont les types des parametres rentrés, tu auras ta réponse :)
Tiens moi au courant pour me dire ce que c´est !

[LoCkLeSs]
[LoCkLeSs]
Niveau 10
11 mai 2005 à 18:46:16

http://walljv.free.fr/index.php?to=view&id=81

J´ai mis qq structures qui correspondent.

Vengeur41
Vengeur41
Niveau 10
11 mai 2005 à 18:49:58

Merci Lockless. Donc ca s´utilise pareil mais en minuscules ?

[LoCkLeSs]
[LoCkLeSs]
Niveau 10
11 mai 2005 à 18:51:15

Ouais c´est pareil, je suis pas sur que ces structs soient déclarés dans socket.h, si ça marche pas tu les ajoutes à ton fichier, et ensuite c´est pareil :)

JeanYvesYves
JeanYvesYves
Niveau 10
11 mai 2005 à 18:51:28

oui il me semble :) je me rappelle quand je faisais de la prog réseau sosu Linux, je n´ai pas eu de mal a passer a la prog réseau sous Windows :)

[LoCkLeSs]
[LoCkLeSs]
Niveau 10
11 mai 2005 à 18:53:30

Moi pareil pour le portage de mon bot, j´ai eu aucun mal à adapter le programme sous linux, le truc c´ets de ne pas utiliser des fonctions propres à winsock.

Vengeur41
Vengeur41
Niveau 10
11 mai 2005 à 19:01:20

Merci beaucoup à vous 2 !

J´arriverai peut-être à faire mon NetMorpion !

JeanYvesYves
JeanYvesYves
Niveau 10
11 mai 2005 à 19:03:57

utilise du multithreading a coté, ça se fait bien : car les fonction read, accept, etc... sont bloquantes...

Mais qui dit multithreading dit : gestion de mutex

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