служба Android для прослушивания определенного порта

#android #service #port #listen

#Android #Обслуживание #порт #слушать

Вопрос:

Я хочу знать, как настроить службу Android, которая прослушивает определенный порт, напримерhttp://127.0.0.1:12345

Ответ №1:

Реализуйте свою службу и используйте ServerSocket класс для прослушивания входящих подключений и для действий в соответствии с ними. Однако не вызывайте ServerSocket.accept() в своем потоке пользовательского интерфейса. Это приведет к тому, что ваше приложение не будет отвечать. Вместо этого создайте новый поток или, в зависимости от вашего реального сценария, AsyncTask может быть достаточно.

Комментарии:

1. @Стивен Прентис Привет. ваш ответ действительно помог мне. Я попробовал это AsyncTask , и это с треском провалилось. Затем я попробовал это в отдельных потоках, и это сработало как по волшебству. Мне было интересно, почему ServerSocket это происходит. Конечно, устал от этого в потоке пользовательского интерфейса, и там тоже произошел сбой. Почему это? Что, если я не возражаю, чтобы моя активность зависала, поскольку ее единственная цель — запустить сервер, например, одним нажатием кнопки?

2. @JasonKrs: Она должна работать с AsyncTask, при условии, что вы выполняете работу с ServerSocket в doInBackground (). Если бы вы могли поделиться кодом здесь, мы могли бы помочь больше. Что касается потока пользовательского интерфейса, это ограничение (может ждать завершения задачи ~ 5 секунд), которое предоставляет Android, потому что поток пользовательского интерфейса отвечает за множество вещей. Из документации: Система не создает отдельный поток для каждого экземпляра компонента. Все компоненты, которые выполняются в одном процессе, создаются в потоке пользовательского интерфейса, и системные вызовы к каждому компоненту отправляются из этого потока.

3. @uncaughtException Аааа в doInBackground() … Я думаю, что, возможно, у меня так не работает… Возможно, именно поэтому произошел сбой… В любом случае, в проекте ht e было сделано много вещей, поэтому я не буду перепрограммировать эту функцию… Я продолжу работать со старомодными потоками. 😉