我已经在VB中编写了一个聊天应用程序,但只要我从客户端发送任何数据,服务器就会将其发送给所有人。它应该只向特定客户发送回复。 这是我用过的功能。
Dim objClient As Client
Dim d As DictionaryEntry
For Each d In mcolClients
objClient = d.Value
objClient.Send(Data & vbLf)
Next
其中mcolClients
是哈希表。
答案 0 :(得分:0)
让我们来看看你的代码:
' 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.Value
为receivedFromClient
的数据。
如果目标是将响应发送回发送消息的客户端(例如'确认'),只需在收到时进行,您无需参考{{ 1}}(在您阅读数据的那一刻,您应该知道您从哪里读取数据)。
如果目标是发送给特定客户,那么您需要两件事:
HashTable
存储在插入UserName
的{{1}}对象中。可能会提供此Client
由客户端首次连接时,例如作为“聊天”协议的一部分。HashTable
,可以在哈希表中查找。因此,客户可以发送UserName
将文本UserName
发送到@somebody here's a secret message
中here's a secret message
Client
属性为HashTable
的{{1}}。需要处理此接收的字符串以提取相关的用户名令牌。考虑使用UserName
作为somebody
的密钥似乎也是有意义的,如果这将是执行查找的主要原因。