В настоящее время я пытаюсь написать приложение для Android для настройки и управления ESP8266, на котором работает микропифон.
На сервере micropython я инициализирую веб-сокет следующим образом:
def __init__(self, task_manager, setup_mode):
address = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
self._socket = socket.socket()
self._socket.bind(address)
self._socket.listen(1)
self._socket.setblocking(False)
self._socket.settimeout(5)
self._task_manager = task_manager
self._setup_mode = setup_mode
print('New Socket is listening on: ', address)
А затем просто прослушайте входящие соединения, как это, и затем реагируйте на входящие сообщения. Также список зациклен, чтобы позволить логике микроконтроллера обновляться каждые 5 секунд.
client, address = self._socket.accept()
print("New request from:", address)
Все работает нормально, когда я отправляю тестовый запрос с помощью python с моего компьютера. Например, простой запрос будет выглядеть примерно так:
data = json.dumps({'load': {'type': "is_lighthub", 'data': {}}})
response = requests.post(ip, json=data)
Однако, когда я пытаюсь сделать тот же пост-запрос, используя OkHttp из приложения для Android, входящее соединение в ESP отсутствует.
Вот код Java для Android:
private void addIfLighthub(final InetAddress address) {
try {
RequestBody body = RequestBody.create(JSON, "{\"load\": {\"type\": \"is_lighthub_server\", \"data\": {}}");
Request request = new Request.Builder()
.url("http://" + address.getHostAddress())
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
final JSONObject myResponse = new JSONObject(response.body().string());
if((boolean)myResponse.get("is_lighthub")) {
onlineDeviceList.add(address);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
} catch (JSONException jsonException) {
System.out.println(jsonException.getMessage());
}
}
Странно, однако, что этот пример кода, если он предоставлен, например, с адресом моего маршрутизатора, получает html-сайт по умолчанию для маршрутизаторов ...
Итак, я что-то упустил? Я довольно плохо знаком с сетью, но простой почтовый запрос с телефона должен быть таким же, как и из примера кода Python, верно?
Или есть ошибка в моей функции Java?
Заранее спасибо, ребята, за помощь!