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

时间:2010-08-20 10:54:08

标签: vb.net sockets

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

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

其中mcolClients是哈希表。

1 个答案:

答案 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.ValuereceivedFromClient的数据。

  • 如果目标是将响应发送回发送消息的客户端(例如'确认'),只需在收到时进行,您无需参考{{ 1}}(在您阅读数据的那一刻,您应该知道您从哪里读取数据)。

  • 如果目标是发送给特定客户,那么您需要两件事:

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