Как отправить данные конкретному клиенту с сервера? - PullRequest
0 голосов
/ 20 августа 2010

Я запрограммировал приложение чата в 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 голосов
/ 08 июня 2011

Давайте посмотрим на ваш код:

' 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 (в момент, когда вы читаете данные, вы должны знать, кто вычитаете это с).

  • Если цель состоит в том, чтобы отправить конкретному клиенту, то вам нужны две вещи:

    1. Способ идентификации клиентасоединение (поэтому, возможно, сохраните UserName в объекте Client, который вставлен, например, в HashTable. Этот UserName может быть предоставлен клиентом при первом подключении, например, как часть вашего протокола 'chat'.
    2. Способ указания целевого клиента, например target * 1.034 *, который можно посмотреть в хеш-таблице.Таким образом, клиент может отправить @somebody here's a secret message для отправки текста here's a secret message на Client в HashTable с атрибутом UserName somebody.Эта полученная строка должна быть обработана для извлечения соответствующего токена имени пользователя.Также представляется целесообразным рассмотреть возможность использования UserName в качестве ключа для HashTable, если это будет основной причиной выполнения поиска.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...