2015-05-09 24 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

我相信这已经解决了。正在传递参考而不是新的向量。

在发送对象之前调用“重置”方法似乎已经解决了这个问题。