2015-05-09 65 views
0

我試圖創建一個簡單的用戶在線,但似乎無法得到正確更新的字符串向量。接收矢量對象沒有正確更新(網絡)

客戶端代碼:(兩個矢量的全球)

else if(command.equals("GET USER LIST")){ 
     test = (Vector)ois.readObject(); 

     for(String s: test){ 
      if(!usersConnected.contains(s)){ 
       usersConnected.add(s); 
       jlConnUsers.setText(jlConnUsers.getText() + s + " "); 
      } 
     } 
     System.out.println("Test array " + test); 
    System.out.println("User array " + usersConnected); 
} 

服務器代碼:

public void getActiveUserList(){ 
    for(ClientConnection client: activeConnections){ 
     String user = client.getUserName(); 
     if(!activeUserList.contains(user)){ 
      activeUserList.add(user); 
     } 
     System.out.println("sent TO client FULL USER LIST:" + activeUserList); 
    } 
} 

因此,客戶端連接,點擊按鈕 「獲取用戶列表」,它被髮送到服務器,服務器通過hashmap,將所有當前客戶端名稱添加到一個向量並將其發回...

我的問題:如果我連接一個客戶端並獲取用戶列表,它將正確顯示SINGLE名稱。如果我連接兩個客戶端並嘗試獲取用戶列表,客戶端1將不會收到更新的矢量,即使服務器正在發送正確的矢量。

服務器始終使用正確的用戶名發送正確的向量。

Client 1: Name 1 (Will not update after more clients connect) 
    Client 2: Name 1, Name 2 (Will not update after more clients connect) 
    Client 3: Name 1, Name 2, Name 3 (Will not update after more clients connect) 

如果我訪問getusers之前,另一個客戶端連接,我不能再次得到正確的向量。

林相當肯定我在這裏錯過了一些非常小的東西,我可能是錯的。有任何想法嗎?謝謝!

+0

'if(!activeUserList.contains(user)){ activeUserList.add(user); }'似乎應該是一個集合 – vandale

回答

0

我相信這已經解決了。正在傳遞參考而不是新的向量。

在發送對象之前調用「重置」方法似乎已經解決了這個問題。