我有一个 Android 应用程序需要让多个设备连接。一台设备应充当组所有者并向所有客户端发出指令以执行特定操作。我认为它类似于一款无线手持游戏,其中一名玩家是主机。
我有几个问题,所以我会尽量保持简洁。即使只回答第一个问题也会有帮助。
首先,我已经使用套接字成功配对了单个服务器和单个客户端电话。我使用 Android 的 Wi-Fi Direct 技术做到了这一点(此处描述 http://developer.android.com/guide/topics/connectivity/wifip2p.html)。该教程很有帮助,但不幸的是不是很彻底,特别是在描述一对多连接方面。一旦找到对等列表,就可以打开套接字连接。我能够使用服务器的线程连接两个设备(使用这个例子 http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/),像这样:
public class ServerThread implements Runnable {
public void run() {
(Code...)
client = serverSocket.accept();
(...other code here.)
}
}
按下按钮后会创建一个客户端(我认为,仍在尝试理解我修改后的代码):
public class MusicClientThread implements Runnable {
Socket socket = new Socket(serverAddr, port);
while (connected) {
//(Other code here.)
while ((line = in.readLine()) != null) {
//While there are still messages coming
}
}
socket.close();
//(Other code here too.)
}
所以我想我的第一个问题是:如何允许更多客户端连接?我的 ServerThread 引用了上面的单个客户端变量,因此我不知道如何允许变化的数量(我的应用程序的目标是 2 到 10 个用户),也不知道区分所有不同客户端的正确方法。我唯一的猜测是我会使用每部电话的唯一 IP 地址。
我的第二个问题是,一旦我与多个客户端/对等方建立了连接,我将如何正确地向他们发送和接收指令?目前,我的单个服务器正在等待指令,并在收到指令后发出响应指令。我需要它,以便服务器可以从一开始就使用按钮发送指令,并且这些结果在客户端设备上可见。
我希望我已经把一切说清楚了!