2014-10-01 98 views
0

我正在编写一个使用套接字进行通信的Android应用程序。在一个名为sever的类中,我接受客户端(android设备)并为它们打开套接字。服务器套接字多线程与设备混淆

服务器端:

public void run() { 
    while (!Thread.currentThread().isInterrupted()) { 

     try { 
      Socket socket = serverSocket.accept(); 

      Client clientThread = new Client(socket); 
      System.out.println("New client: " + clientThread.getName()); 
      new Thread(clientThread).start(); 

     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 

一个成功的连接用户可以创建一个group,这就像一个房间,为客户的号码连接一起玩了。

群创建都是在这里完成:

服务器端:

客户:

private void client_create() { 
    this.mGroup = new Group(); 
    mGroup.joinPlayer(this); 
    System.out.println("New group for: " + name); 
} 

组:

public Group(int nClients){ 
    // Clients in this group 
    this.clients = new ArrayList<Client>(); 
} 

public void joinPlayer(Client player){ 
    clients.add(player); 
} 

客户端:

Connecti在处理:

try { 
      socket = new Socket(hostName, portNumber); 

      out = new PrintWriter(new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream())), true); 

      in = new BufferedReader(new InputStreamReader(
        socket.getInputStream())); 

      Listener listener = new Listener(); 
      new Thread(listener).start(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

我在2个android设备和我的本地主机上运行这个程序作为服务器。连接完成后,我尝试创建2个独立的不同组。在进行调试时,它似乎都是合法的,直到我由于2个不同的运行线程而失去它时才达到某个点。

所发生的奇怪的是,所述第一组与所述第一客户端(clients包含第一设备客户对象)创建后,再与第二玩家的第二组(clients包含第二设备客户对象),第一组clients数组包含第二个客户端对象(来自第二个设备)。 你有什么想法吗?我做错什么了吗?

回答

0

想通了。 Clients被错误地定义为静态的,所以我想在访问静态对象的clients数组时,它会收到创建的最后一个数组。