2010-08-20 8 views
0

J'ai programmé une application de chat en VB mais dès que j'envoie des données d'un client, le serveur les envoie à tous. Il devrait envoyer une réponse seulement à un client particulier. C'est la fonction que j'ai utilisée.Comment envoyer des données à un client particulier à partir du serveur?

Dim objClient As Client 
Dim d As DictionaryEntry 
For Each d In mcolClients 
    objClient = d.Value 
    objClient.Send(Data & vbLf) 
Next 

mcolClients est une table de hachage.

Répondre

0

Regardons votre code:

' Declare your variables 
Dim objClient As Client 
Dim d As DictionaryEntry 

' For every client in the hash table 
For Each d In mcolClients 
    objClient = d.Value 
    ' Send the data to the client. 
    objClient.Send(Data & vbLf) 
Next 

Ce fait exactement ce que vous attendez à, à savoir envoyer Data à chaque client connecté qui est dans le HashTable.

Votre question était, comment envoyez-vous les données à un client particulier, plutôt que chacun d'eux. Pour donner une réponse spécifique, plus de détails seraient nécessaires sur ce qui est en train d'être réalisé/comment votre code actuel est structuré. Mais voici quelques options générales ...

  • Si le but est d'envoyer à tout le monde, mais le client que les données ont été reçues de, vous pouvez modifier votre code actuel afin que, en plus de Data il a également fourni receivedFromClient, puis n'envoyez pas les données où d.Value était receivedFromClient. Si le but est d'envoyer une réponse au client qui a envoyé le message (comme un 'ack'), il suffit de le faire au point de réception, vous n'avez pas besoin de vous référer à votre HashTable (au moment où vous lisez les données, vous devez savoir de qui vous lisez).

  • Si le but est d'envoyer à un client spécifique, vous avez besoin de deux choses:

    1. Une façon d'identifier la connexion par le client (éventuellement stocker un UserName dans l'objet Client qui est inséré dans la HashTable par exemple, ce UserName peut être fourni par le client lors de ses premières connexions, par exemple dans le cadre de votre protocole 'chat'
    2. Une façon de spécifier le client cible, comme la cible UserName, qui pourrait être recherchée dans le hachage. Donc, le client pourrait envoyer @somebody here's a secret message pour envoyer le texte here's a secret message au Client dans le HashTable avec un attribut UserName de somebody. Cette chaîne reçue doit être traitée pour extraire le jeton de nom d'utilisateur pertinent. Il semblerait également logique d'envisager d'utiliser UserName comme clé pour le HashTable, si cela va être la principale raison pour effectuer des recherches.
Questions connexes