Se connecter / S'enregistrer
Votre question

Socket C++

Tags :
  • Serveur
  • Programmation
Dernière réponse : dans Programmation
15 Novembre 2009 13:35:11

Bonjour! :bounce: 

Je travail en ce moment sur un serveur de mini-chat que je doit créer à partir de rien pour un TP en C++.
Je dispose de l'outil C++ Builder 6.
J'ai déjà créer un client fonctionnel qui fonctionne parfaitement bien.

Cependant j'ai du mal à faire fonctionner le serveur.

Je cherche un moyen de stocker les adresses ip de chaque client, sachant qu'un client doit pouvoir se connecter plusieurs fois depuis un poste mais sous des logins différents.

Je chercher aussi un moyen de pouvoir déconnecter un client spécifique. J'ai entendu dire que le client doit normalement recevoir un signal du serveur pour lui demandé de se déconnecté, et que déconnecter un client directement depuis le serveur est impossible.

J'utilise pour la connection client/serveur les composant TClientSocket/TServeurSocket.

Voila, j'ai besoin d'aide svp :cry: 

Merci d'avance!

Autres pages sur : socket

a b L Programmation
15 Novembre 2009 13:43:00

Si tu utilise les sockets, tu gère toi-même les connexions (clients connectés sur threads, système de login, protocole applicatif). Une fois cette partie faite, ce que tu demandes est simple.
m
0
l
15 Novembre 2009 15:32:44

C'est justement pour les connections que j'ai un problème.
J'ai eu l'ip de stocker les différentes ip dans un tableau d'ansistring. Le problème est que lorsque deux logiciels clients se connecte à partir d'un même pc et que je ne veux envoyer des information qu'a un seul clients, je n'ai aucun moyen de les différencier.

Il y a t'il un équivalent C++ à la SortedList du C# ?
m
0
l
Contenus similaires
a b L Programmation
15 Novembre 2009 18:21:03

les ports côté client et serveur sont différents. Ce sont 2 connexion distinctes.
Si c'est juste pour avoir un identifiant, tu peux prendre IP + port du client.
m
0
l
15 Novembre 2009 18:37:44

A ouaiiiiii :bounce: 

Ca marche !! Merci! [:_tom_:7]

Et donc si par exemple je veux envoyer un message a un client particulier, disons celui qui a le port 50555 (au hazard), je fais :

  1. ServerSocket1->Socket->RemotePort = 50555;
  2. ServerSocket1->Socket->SendText("couou");


ou quelque chose ne va pas?
m
0
l
a b L Programmation
15 Novembre 2009 19:05:27

Je ne me rapelle plus comment la VCL de borland fonctionne pour ses sockets, mais je principe est toujours le même:
1. client port A demande une connexion sur le serveur port SERVEUR
2. si le serveur accepte, il redirige la connexion sur un autre port: client port A est connecté à serveur port B pour libérer port SERVEUR pour les autres connexions.
Tu dois gérer la liste des clients, et tu dois logiquement avoir une nouvelle socket à l'issue de l'étape 2.
Une fois que le client s'est connecté, tu dois avoir 2 sockets:
- la socket de connexion serveur (sur le port SERVEUR)
- la socket de la connexion établie avec le premier client

ça c'est certainement transparent en borland, mais lorsque l'appel à la méthode qui se connecte, tu as certainement en paramètre l'objet socket créé pour la nouvelle connexion (faudrait voir la doc).
m
0
l
19 Novembre 2009 15:37:59

Merci! [:_tom_:7]

Effectivement tout est transparent sur borland.

J'ai réussi a envoyer un message à tous les clients connectés; il suffisait de faire :
  1. for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
  2. ServerSocket1->Socket->Connections[i]->SendText("toto");


Mais il me reste un problème, je ne sais pas comment envoyer un message à un seul client en particulier.
Une idée?
m
0
l
a b L Programmation
19 Novembre 2009 19:56:50

J'ai trouvé ça:
http://bit.kuas.edu.tw/~csshieh/teach/np/bcbvcl/index.html
ton ServerSocket1->Socket->Connections est un TCustomWinSocket, donc tu as:
- son IP: ServerSocket1->Socket->Connections->RemoteAddress
- son port: ServerSocket1->Socket->Connections->RemotePort
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS