Невозможно установить Soket Connection, когда подключено больше устройств - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть 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 в локальной сети?

...