【问题标题】:Http request send by OkHttp not received on micropython server在 micropython 服务器上未收到 OkHttp 发送的 Http 请求
【发布时间】:2019-09-23 10:43:04
【问题描述】:

我目前尝试编写一个 android 应用程序来设置和控制运行 micropython 的 ESP8266。
在 micropython 服务器上,我像这样初始化一个 websocket:

    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)

当我从 PC 使用 python 发送测试请求时,一切正常。例如一个简单的请求会是这样的:

data = json.dumps({'load': {'type': "is_lighthub", 'data': {}}})
response = requests.post(ip, json=data)

但是,当我尝试使用来自 Android 应用的 OkHttp 发出相同的发布请求时,ESP 上没有传入连接。
这是android java代码:

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 函数有错误?

提前感谢各位的帮助!

【问题讨论】:

  • "...在 micropython 服务器上,我像这样初始化一个 websocket:.." - 你所做的不是 websocket,而是一个普通的 socket。
  • @SteffenUllrich 哦,是的,很抱歉使用了错误的术语...

标签: android sockets okhttp esp8266 micropython


【解决方案1】:

如果我自己修好了! 错误是 python 测试客户端单独发送 json,而 okhttp 客户端将两者一起发送。 这使得服务器在等待第二条消息时超时......

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多