2010-08-20 169 views
0

我已經在VB中編寫了一個聊天應用程序,但只要我從客戶端發送任何數據,服務器就會將它發送給所有人。它應該只向特定的客戶發送回覆。 這是我用過的功能。如何從服務器向特定客戶端發送數據?

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

其中mcolClients是一個散列表。

回答

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

  • 如果我們的目標是向發送消息的客戶發送回覆(如'ack'),只需在收貨時進行,您根本不需要參考HashTable (在你讀數據的時候,你應該知道你在讀誰。)

  • 如果目標是發送給特定的客戶,那麼你需要兩樣東西:

    1. 一種識別客戶端的連接方式(這樣可能存儲UserName在插入HashTableClient對象例如,這個UserName可能由客戶端在第一次連接時提供,例如作爲你的'聊天'協議的一部分
    2. 一種指定目標客戶端的方法,例如目標客戶端UserName,可以在哈希中查找所以,一個客戶端可以發送@somebody here's a secret message到文本here's a secret messagesomebody一個UserName屬性發送到ClientHashTable。收到的字符串需要處理以提取相關的用戶名令牌。如果這將成爲執行查找的主要原因,考慮使用UserName作爲HashTable的關鍵字似乎也是有意義的。
相關問題