2014-10-01 80 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數組時,它會收到創建的最後一個數組。

相關問題