Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1764 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] multi-Socket client/serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] multi-Socket client/serveur

n°1950665
skapin
Posté le 15-12-2009 à 23:00:35  profilanswer
 

Bonsoir,
 
J'utilise Qt pour coder mon appli, mais ems questions sont d'ordre generales.
 
je suis en train de faire une application réseaux. J'ai un TcpServer qui ecoute sur le port 6666 les nouvelle connexions et crée un socket. Il donne ensuite ce socket a un nouveau thread "serveur" pour communiqer avec le client.
J'ai donc 1 client = 1 thread "serveur".
Or je m'en viens a me poser la question suivant.
Mes sockets sont connecté sur qu'elles port ? Est-ce le 6666 pour tous (coté serveur) ? Est-ce possible, car j'ai cru comprendre que 1 port = socket maxi...
Et pour mon serveur, il communique sur le port fournit par le client je suppose ?
en faisant Tcpdump, je crois voir que le client communique depuis un port X et le serveur lui répond depuis le 6666 meme depuis mon thread...Donc soit c'est le Tcpserveur qui dispatch en interne les donnée (??) sois je sais pas trop en faite.
 
 
Je me pose c'est question car maintenant je veux faire mon application en UDP,  or il n'y a pas UdpServer pour "listen" les nouvelles connexions. Puisque l'on travail en mode non connecté.
Est-ce que je peux alors faire comme pour mon TCP, 1thread par client, juste en lui donnant le socket nouvellement crée? Je suppose que non. Y a t'il des mécanisme intégré a Qt ? sinon, pensez vous que le mieux serait de mettre un "serveur" sur un port (6006 par exemple) qui crée juste les thread serveur. Ensuite chaque thread serveur est sur un port différent, et communique au client sur qu'elle port communiquer ?
 
Comment faire une application serveur UDP (TCP aussi par exemple mais je veux UDP) qui accepte plusieur client a  la fois, sur le meme port? Et-ce que c'est possible, ou le port identique c'ets juste pour se signaliser et recevoir le nouveau port propre a chaque client?
Est-ce que l'on peut avoir 2 socket sur le meme port ?(comment fait par exemples SSH/FTP/TELNET etc?)
 
Merci d'avance au âme charitable pouvant m'éclairer sur tout ca.

mood
Publicité
Posté le 15-12-2009 à 23:00:35  profilanswer
 

n°1950683
ptitchep
Posté le 16-12-2009 à 01:10:07  profilanswer
 

Je n'ai pas la réponse à toutes tes questions (du moins je ne suis pas sur de moi et mieux vaut fermer sa gueule que de mettre quelqu'un sur une mauvaise piste). Donc je ne réponds pas à toutes, il y aura bien quelqu'un qui sait qui passera.
Pour l'UDP, tu crées une socket et tu utilises  
 
ssize_t recvfrom(int s, void *buf, size_t len, int flags,
                        struct sockaddr *from, socklen_t *fromlen);
 
Tous les clients envoient au même "endroit", tu reçois tout de la même façon puis tu identifies les clients grace à la structure from qui est remplie avec les infos du client au retour de la fonction. Ensuite quand tu as identifié le client rien ne t'empêches d'envoyer ce que tu viens de recevoir à un autre thread ou processus (qui correspond au client en question) via un pipe par exemple.
 
Je pense que SSH crée une socket tcp puis utilise accept exactement comme toi pour chaque client. 1 client = 1 thread (à moins que ce ne soit une boucle qui balaye tous les clients mais je ne vois pas l'intêret).
 


---------------
deluser --remove-home ptitchep
n°1950690
Joel F
Real men use unique_ptr
Posté le 16-12-2009 à 07:00:30  profilanswer
 

de tête, y a un exemple de client serveur correct dans Boost.ASIO

n°1950732
ptitchep
Posté le 16-12-2009 à 09:53:32  profilanswer
 

Ah oui j'étais en C moi...


---------------
deluser --remove-home ptitchep
n°1951043
skapin
Posté le 17-12-2009 à 00:55:38  profilanswer
 

Ok de toute facon C/C++ ou java et nimorte..les socket, ca marche pareil.
Donc ouai, faire un serveur qui dispatch les donnée au "bon" serveur.
Je peux par exemples mettre une info dans l'entete du message qui stipule a quelle client c'est destiné? (mais ca m'a l'air bof niveau sécurité ca)
quelle serait la meilleur solution a votre avis (pour UDP garder le principe 1clinet =1 threead serveur)

n°1951109
ptitchep
Posté le 17-12-2009 à 10:39:26  profilanswer
 

Joel F a écrit :

de tête, y a un exemple de client serveur correct dans Boost.ASIO



---------------
deluser --remove-home ptitchep
n°1951220
skapin
Posté le 17-12-2009 à 15:10:29  profilanswer
 

Oui je l'ai deja vu plein de fois, puisque j'ai meme fait mon appli aussi avec boost.asio en TCP
Mais la, dans l'exemple en UDP, je vosi pas comment faire pour faire  1client = 1serveur (thread).
 
Deja esce que vous me confirmer que 1 port = 1 unique socket ?

n°1951260
ptitchep
Posté le 17-12-2009 à 16:39:24  profilanswer
 

En UDP, je n'ai toujours utilisé qu'une socket. Après rien ne t'empêche de l'utiliser dans plusieurs thread avec un mutex pour éviter de faire du caca.


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] multi-Socket client/serveur

 

Sujets relatifs
cgi perl: comment fermer la connexion serveur en continuant le script[Objective-C] Application de chat pour iphone / socket
classer alphabiquement le contenu d'un répertoiretransfert de fichier, client serveur
Problème de connexion avec le serveur MySQLsocket Client/Serveur
a l'aide: creation d'un objet prix et un serveur en JAVA 
Plus de sujets relatifs à : [c++] multi-Socket client/serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR