如何从服务器向特定客户端发送数据?

问题描述:

我已经在VB中编写了一个聊天应用程序,但只要我从客户端发送任何数据,服务器就会将它发送给所有人。它应该只向特定的客户发送回复。 这是我用过的功能。如何从服务器向特定客户端发送数据?

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

其中mcolClients是一个散列表。

让我们来看看你的代码:

' 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 

这不正是你期待它什么,即发送Data到每一个连接的客户端这是在HashTable

你的问题,你如何将数据发送到一个特定的客户端,而不是所有的人。为了给出具体的答案,需要更多的细节来说明试图达到的目标/你当前的代码的结构。但这里有一些常规选项...

  • 如果目标是要发送到每个人,但该数据是从收到客户端,那么你可以修改当前的代码,以便除了Data它还提供receivedFromClient,那么不要发送数据d.ValuereceivedFromClient

  • 如果我们的目标是向发送消息的客户发送回复(如'ack'),只需在收货时进行,您根本不需要参考HashTable (在你读数据的时候,你应该知道你在读谁。)

  • 如果目标是发送给特定的客户,那么你需要两样东西:

    1. 一种识别客户端的连接方式(这样可能存储UserName在插入HashTableClient对象例如,这个UserName可能由客户端在第一次连接时提供,例如作为你的'聊天'协议的一部分
    2. 一种指定目标客户端的方法,例如目标客户端UserName,可以在哈希中查找所以,一个客户端可以发送@somebody here's a secret message到文本here's a secret messagesomebody一个UserName属性发送到ClientHashTable。收到的字符串需要处理以提取相关的用户名令牌。如果这将成为执行查找的主要原因,考虑使用UserName作为HashTable的关键字似乎也是有意义的。