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
數組包含第二個客戶端對象(來自第二個設備)。 你有什麼想法嗎?我做錯什麼了嗎?