Давайте посмотрим на ваш код:
' 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
.
* 1007.* Ваш вопрос был, как вы отправляете данные одному конкретному клиенту, а не всем им.Чтобы дать конкретный ответ, потребуется больше подробностей о том, что пытается быть достигнуто / как структурирован ваш текущий код.Но вот некоторые общие параметры ...
Если цель состоит в том, чтобы отправить всем, кроме клиента, данные которого были получены, вы можете изменить свой текущий код, чтобы дополнительнона Data
он также поставил receivedFromClient
, затем не отправляйте данные, где d.Value
было receivedFromClient
.
Если целью является отправка ответа клиентуотправившего сообщение (например, «ack»), просто сделайте это в точке получения, вам вообще не нужно ссылаться на HashTable
(в момент, когда вы читаете данные, вы должны знать, кто вычитаете это с).
Если цель состоит в том, чтобы отправить конкретному клиенту, то вам нужны две вещи:
- Способ идентификации клиентасоединение (поэтому, возможно, сохраните
UserName
в объекте Client
, который вставлен, например, в HashTable
. Этот UserName
может быть предоставлен клиентом при первом подключении, например, как часть вашего протокола 'chat'. - Способ указания целевого клиента, например target * 1.034 *, который можно посмотреть в хеш-таблице.Таким образом, клиент может отправить
@somebody here's a secret message
для отправки текста here's a secret message
на Client
в HashTable
с атрибутом UserName
somebody
.Эта полученная строка должна быть обработана для извлечения соответствующего токена имени пользователя.Также представляется целесообразным рассмотреть возможность использования UserName
в качестве ключа для HashTable
, если это будет основной причиной выполнения поиска.