我有6台设备在本地网络上运行我的应用程序。每个设备都知道所有其他设备的IP地址和端口地址。每个设备都使用AsyncTask同时向这6个设备发送一些数据,如下所示
public class Client extends AsyncTask<Void, Void, Void> {
...
...
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket();
socket.connect(new InetSocketAddress(dstAddress, dstPort), 4000);
OutputStream out = socket.getOutputStream();
PrintStream printStream = new PrintStream(out);
printStream.println(dataToSend);
out.flush();
}
}
在主类中,我使用Client通过循环将这6个设备发送到这6个设备,其中ip和port是具有发送设备的ip和端口地址的数组
for(i=0; i<6; i++){
Client c = new Client(ip[i], port[i]);
c.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
在服务器类中,我接受此消息,如下所示
private class SocketServerThread extends Thread {
@Override
public void run() {
try {
serverSocket = new ServerSocket(socketServerPORT);
while (true) {
Socket socket = serverSocket.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
response = input.readLine();
Log.d(TAG, "doInBackground: reading input from client " + response);
}
}
}
}
上面的代码可在4个设备上正常工作,以在所有设备之间进行通信。当设备数为5时,两个设备之间的通信被阻止,并且客户端连接线显示此错误。
failed to connect to /192.168.1.153 (port 8474) after 4000ms: isConnected failed: EHOSTUNREACH (No route to host)
当设备数量超过4时,这些设备之间的连接将变得困难。这些设备无法相互通信。所有显示相同错误连接的设备均失败
首先,我使用相同的端口进行所有通信,但后来我为每个设备分配了不同的端口地址,但问题仍然存在。
我不知道AsyncTask或套接字通信是否有问题。我有什么更好的方法可以通过局域网上的WIFI与多个设备通信?