Android ServerSocket принимает в качестве точки доступа Wi-Fi

У меня есть устройство Android, которое работает как точка доступа (также известная как точка доступа Wi-Fi), и на нем работает этот код:

    serverSocket = new ServerSocket(serverPort);

    serverSocket.setReuseAddress(true);

    while (RUNNING) {
        try {
            final Socket socket = serverSocket.accept();

Я заставлю другое клиентское устройство подключиться к точке доступа Wi-Fi этого устройства и попытаюсь подключиться к розетке, и оно не сможет этого сделать.

IP-адрес точки доступа что-то вроде 192.168.43.1... поэтому я попробую подключиться с клиентского устройства к 192.168.43.1:8080, и это не сработает.

Однако, если оба устройства подключены к другой сети Wi-Fi, serverSocket.accept(); будет работать нормально! Я использую порт 8080.

Нужно ли указывать серверному сокету принимать интерфейс «ap0»? (Могу ли я это сделать?) Это проблема с брандмауэром на устройстве Android?

Любые решения/идеи/предложения приветствуются!

Изменить:

Я изменил порт на 8988 и теперь все работает отлично! ... Может ли это быть проблемой брандмауэра? Любые идеи, как ориентироваться в этой проблеме?


person ChrisVollo    schedule 20.11.2014    source источник


Ответы (1)


Да, вам также нужно открыть сокет на стороне сервера.

Вы должны попробовать пример Android WiFiDirectDemo, доступный в устаревшей версии Android: \Android\android-studio\sdk\samples\android-19\legacy просто импортируйте его в свою среду и попробуйте.

person 5er    schedule 20.11.2014
comment
Поменял порт с 8080 на 8988 и теперь работает. Теперь я хочу знать, как заставить его работать на порту 80! знак равно - person ChrisVollo; 20.11.2014
comment
Порты @ChrisVollo до 1024 зарезервированы для системы. Зачем вам порт 80? - person 5er; 21.11.2014
comment
Нашел решение. Я изменил iptble, чтобы перенаправить весь трафик с порта 80 на порт 8080. - person ChrisVollo; 21.11.2014