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

Socket visual c++ udp multiutilisateurs

legume_sylkis
legume_sylkis
Niveau 10
10 mai 2005 à 10:55:43

Re

Une autre question, toujours concernant mon chat en visual c++ sous Visual Studio.net 2003.

Pour le moment, le client envoie sur le port 515 et recois sur le port 516. Le serveur fait l´inverse ( évidemment).

Quand je connecte plusieurs clients, j´ai evidemment un message d´erreur me disant que blablable peut pas avoir plusieurs sockets sur le meme port.

Le premier client peut envoyer et recevoir des messages. Ca marche nickel. Le deuxieme ne peut qu´en envoyer mais pas en recevoir. Mais les messages du deuxieme s´affichent impecc´ sur le premier et le serveur.

Le probleme vient donc du fait que le serveur ne peut pas retourner le message sur son port d´envoie quand celui-ci est écouté par plusieurs clients à la fois...

Ma question est :
- y´a t´il une facon de forcer le serveur à pouvoir envoyer un message sur un port utilisé par plusieurs clients simultanément et si oui comment?
- si pas, est-ce que quelqu´un a une autre solution?

Merci d´avance.
Legg.

[LoCkLeSs]
[LoCkLeSs]
Niveau 10
10 mai 2005 à 17:49:11

Est ce que tu as essayé de créer une ( un ? ) nouvelle ( nouveau ? ) socket pour envoyer ces messages ?

legume_sylkis
legume_sylkis
Niveau 10
11 mai 2005 à 08:25:44

Ben je suis en train d´essayer, mais le tout c´est de savoir quel port attribuer à cette adresse ( et créer un socket sur le même sur le client ET sur le serveur).

Si vous avez une solution dites-le moi parce que là je m´amuse à envoyer une demande de port sur le serveur depuis le client dans le form_load sur un port réservé à cet effet, le serveur retourne un port non-utilisé en incrementant le port de base du nombre d´utilisateurs connectés, le serveur et le client créent leurs sockets sur ce port et aprés le client abandonne le port par défaut pour le laisser libre pour les clients suivants.

Bref un beau pitit bordel qui n´est probablement pas la meilleure solution.

[LoCkLeSs]
[LoCkLeSs]
Niveau 10
11 mai 2005 à 13:27:47

C´est sur que c´est un peu lourd d´utiliser tant de ports...
Mais t´es sur qu´on peut pas creer/utiliser deux sockets utilisant le meme port ? Comme ça tas pas besoin d´utiliser 50 ports.

legume_sylkis
legume_sylkis
Niveau 10
11 mai 2005 à 14:17:13

Ben idéalement, j´aurai bien voulu que plusieurs clients puissent écouter le même port et que le serveur balance son message dessus sans se poser de question, mais il a pas l´air d´apprécier, donc...

legume_sylkis
legume_sylkis
Niveau 10
13 mai 2005 à 08:29:18

Toujours pas d´idées?

legume_sylkis
legume_sylkis
Niveau 10
16 mai 2005 à 10:56:47

. ..

Toujours personne ? A l´aideuh... please.

Ptival
Ptival
Niveau 10
16 mai 2005 à 13:08:40

Un port par client géré par liste chaînée ( moi c´est ce que je suis en train de coder non sans mal)

legume_sylkis
legume_sylkis
Niveau 10
17 mai 2005 à 09:47:05

Je sais que je dois attribuer un port à chaque client, mais comment je fais ?

Pour le moment, j´envoie une chaine de caractère précise ( genre " connexion") lors du lancement du client. J´envoie ensuite mon login.

Quand le serveur recoit la chaine " connexion", il remet un booléen " connect" à false, ce qui a pour effet de l´envoyer dans un if où le numéro de port par défaut est incrementé du nombre d´utilisateur, retourné au client qui crée un nouveau socket sur ce port et détruit l´ancien. " connect" est ensuite mis à true pour passer dans un deuxieme if où le serveur se contente d´envoyer sur chaque port le message recu sur son port d´écoute...

Ca fonctionne trés bien... sauf que le serveur recoit pas correctement la chaine " connexion"

/ /Si on a recu le message de connexion
if(dataRec == " connexion")
{
connect=false;
}

Il veut pas rentrer la dedans quand il recoit " connexion". Resultat, seul mon premier client recoit son port normalement. Le deuxieme passe direct dans le if de communication normal et ne recoit pas son port.

Mon probleme est donc pour le moment d´arriver à faire en sorte que le serveur recoive correctement la chaine " connexion", la détecte et rentre dans ce if(dataRec == " connexion") de mes...

Je sais pas pourquoi il rentre pas dedans. Peut-etre que ma chaine est legerement modifiée lors de l´envoie et ne correspond donc plus tout à fait à ce que je cherche dans mon if... mystère.

JeanYvesYves
JeanYvesYves
Niveau 10
17 mai 2005 à 11:08:13

en UDP, il n´y a pas de connexions :
tu envoies des données sur un port, qui que tu sois, ça n´a pas d´importance
L´UDP, c´est un mode de transmission non connecté.
Il ne devrait donc y avoir aucun probleme.

legume_sylkis
legume_sylkis
Niveau 10
17 mai 2005 à 11:14:04

Je sais tout ca.

Je resume :
- J´ai plusieurs clients qui envoient des messages sur le serveur ( forcement). Ils envoient tous leurs messages sur le meme port ( y´a donc un seul socket d´écoute sur le serveur). Ca, ca marche trés bien.
- Le serveur doit, à chaque fois qu´il receptionne un message, le renvoyer à tous les utilisateurs. Et c´est là que ca plante : il veut pas envoyer le message sur son socket d´envoie si plusieurs clients ont un socket d´écoute utilisant le meme port. Donc un socket peu pas envoyé sur un port " écouté" par plusieurs autres sockets.

Faut donc simplement que je créé plusieurs sockets d´envoie sur le serveur ( utilisant des ports différents) et que j´arrive à créer des sockets d´écoute sur les clients utilisants chacun un seul des ports utilisés par le serveur pour ses sockets d´envoie.

Je sais pas si j´explique clairement...

L´idéal aurait évidemment était que le serveur balance son message sur le port sans se poser de question et que tous les clients puissent écouter ce port unique et recevoir le message... mais ca marche pas.

legume_sylkis
legume_sylkis
Niveau 10
17 mai 2005 à 11:15:58

En bref :

- plusieurs sockets peuvent envoyer sur un port ecouté par un seul socket.
- un socket ne peut pas envoyé un message sur un port ecouté par plusieurs sockets.

J´ai donc pas de problemes pour envoyer des clients sur le serveur. J´ai des problemes pour envoyer du serveur vers les clients.

legume_sylkis
legume_sylkis
Niveau 10
17 mai 2005 à 11:42:51

Manifestement, le probleme vient bien du fait de la chaine " connexion" que je passe au serveur lors du démarrage d´un client. Elle doit être legerement modifiée lors de l´envoie.

Là je passe... une chaine vide et ca marche trés bien. Il rentre dans le premier if(dataRec == " ") et me fait tous ce que je veux impeccable ( j´ai maintenant un petit probleme avec mon client mais c´est une autre histoire).

J´aimerai quand meme bien arriver à detecter convenablement une chaine de caractere precise, parce que si le serveur reinitialise tout à chaque fois qu´on lui balance une chaine vide, ca risque d´etre assez embetant.

legume_sylkis
legume_sylkis
Niveau 10
18 mai 2005 à 10:51:12

Bon, ben j´ai changé ma facon de travailler. Deux threads dans le serveur, un pour les demandes de connexion, l´autre pour les messages normaux, les deux avec des sockets sur ports différents. Ca marche trés bien.

Merci quand meme à ceux qui ont essayé de m´aider.

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