Я пишу приложение для Android, которое подключается к серверу аутентификации для получения IP-адреса и порта другого устройства Android, на котором запущена отдельная серверная программа. Сервер аутентификации отправляет правильную информацию о соединении при отправке запроса. Проблема заключается в том, что клиентское устройство пытается подключиться к серверу Android. Клиент получает правильную информацию и успешно закрывает предыдущие подключения, но зависает при попытке создать новые подключения. Исключения не выдаются, но пользовательский интерфейс не отвечает, и устройство в конечном итоге сообщает, что приложение не отвечает. У меня есть эмулятор, выступающий в роли клиентского устройства, и реальный телефон, выступающий в роли сервера.
Вот часть клиентского кода, на которой он зависает:
Log.i("Socket", "About to open a new socket");
socketChannel = SocketChannel.open(new InetSocketAddress(ip, port));
socketChannel.configureBlocking(false);
socketChannel.register(selector, SelectionKey.OP_READ);
Log.i("Socket", "New socket created and registered");
ip — это String
, содержащий IP-адрес сервера. port — номер порта сервера. У меня есть два вызова Log.i()
, чтобы найти, где зависает программа. Первый вызов выполняется, а второй нет. Есть ли причина, по которой этот сегмент кода может привести к зависанию приложения?
Я могу опубликовать больше своего кода, если это необходимо, но я уверен, что проблема в сегменте, указанном выше.