У меня есть 6 устройств, работающих с моим приложением в локальной сети Каждое устройство знает IP-адрес и адрес порта всех других устройств. Каждое устройство отправляет данные на все эти 6 устройств одновременно, используя AsyncTask, как показано ниже
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 устройств, используя цикл, где 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 в локальной сети?