【发布时间】:2014-10-01 20:11:05
【问题描述】:
我正在编写一个使用套接字进行通信的 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);
}
客户端:
连接处理:
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 设备上运行这个程序,并在我的 localhost 作为服务器。建立连接后,我尝试创建 2 个独立的不同组。在调试时,这一切似乎都是合法的,直到我因为 2 个不同的运行线程而丢失它。
奇怪的是,在第一个组创建了第一个客户端之后(clients 包含第一个设备客户端对象),然后第二个组使用第二个播放器(clients 包含第二个设备客户端对象),第一组clients 数组包含第二个客户端对象(来自第二个设备)。
你对此有什么想法吗?我是不是做错了什么?
【问题讨论】:
标签: android multithreading sockets