cs_rafalus
Messages postés6Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention19 mai 2007
-
17 mai 2007 à 23:03
cs_rafalus
Messages postés6Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention19 mai 2007
-
19 mai 2007 à 09:25
Bonjour,
développant actuellement un programme fonctionnant sur internet en utilisant les composants TServerSocket et TClientSocket, j'en suis venu à rencontrer un problème. Après une recherche, ne trouvant pas de réponse concrète, je poste ici. Revenons au problème, je vais essayer d'expliquer simplement :
J'ai une partie client et une partie serveur. Admettons que 58 clients soient connectés au serveur et que le N°37 envoit un texte quelconque que seul le serveur doit traîter pour le ramener vers ce client.
Côté client j'utilise la méthode SendText : ClientSocket1.Socket.SendText(message quelconque);
Le serveur reçoit ce message par l'événement OnClientRead, l'identifie pour savoir qu'en faire et le renvoit par :
for i:=0 to Server.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(message quelconque);
Et c'est bien là le problème, je n'arrive pas à indexer les clients car en utilisant "for i:=0 to Server.Socket.ActiveConnections-1", je créée une boucle qui envoit le message à tous les clients or je veux le renvoyer qu'au N°37. Je me demande donc comment faire pour que le serveur sache que c'est le N°37 qui a envoyé ce message pour remplacer "i" par "37" par exemple.
J'éspère avoir été assez clair dans ma demande, merci d'avance pour vos réponses et bonne prog'.
Je ne cerne pas trop ton problème. Voila alors plusieurs cas
1)Quand le serveur recoit un message du client i, il en renvoit un autre au client i
Var
i:cardinal,;
begin
i:=(Server.Socket.ActiveConnections-1);
ServerSocket1.Socket.Connections[i].SendText(message quelconque);
End;
2)Quand le serveur recoit un message d'un client , il en renvoit un autre au client i
Var
i:Cardinal;
Begin
If (Server.Socket.ActiveConnections-1)=36 then
ServerSocket1.Socket.Connections[i].SendText(message quelconque);
End;
3)Quand le serveur recoit un message d'un client , il en renvoit un autre aux autres clients i sauf celui qui a envoyé le message :
Var
i,j:cardinal;
Begin
i:=(Server.Socket.ActiveConnections-1);
For j:=0 to (Server.Socket.ActiveConnections-1) Do
If i<>j then ServerSocket1.Socket.Connections[j].SendText(message quelconque);
End;
cs_rafalus
Messages postés6Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention19 mai 2007 18 mai 2007 à 08:22
Salut Francky,
Merci pour ta réponse. Seulement il n'est pas obligé que ce soit le N°37 qui envoit la donnée au serveur pour la renvoyer à celui-ci, ça peut très bien être le N°12,le N°45 etc. donc ce serait un peu louche de mettre :
If (Server.Socket.ActiveConnections-1)=N°du client then
ServerSocket1.Socket.Connections[N°du client].SendText(message quelconque);
et ce pour chaque client (sachant que le nombre de clients que j'accueille n'est pas défini). C'est pour ça que je pense qu'il serait mieux d'utiliser une variable qui détecte quel client a envoyé le message quelconque, seulement je ne sais pas comment détecter cela. Je fais donc appel à vos connaissances !
Bonne prog' !
Vous n’avez pas trouvé la réponse que vous recherchez ?