Android & NodeMCU,从服务器接收响应无法正常工作?

查雷克

我写了一个应用程序,Android它实现了向Volley服务器发送简单的请求(使用)。服务器位于 NodeMCU (ESP8266) 微控制器上,以Lua. 问题是,发送请求后,应用程序并不总是能够打印响应。如果地址是例如“ http://www.google.com ”,它会正确发送请求并接收并显示响应,但如果它是下面代码中的地址 - 它会正确发送请求(服务器做出反应)但没有( ?) 接收响应(不显示它,显示:“那没有用!”)。您有什么想法,我该如何解决并打印回复?

Android(负责发送请求的部分):

buttonSynchro.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {


        // Instantiate the RequestQueue.
        String url = "http://192.168.1.12/";


        // Request a string response from the provided URL.
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Display the first 500 characters of the response string.
                        testTextView.setText("Response is: "+ response.substring(0,500));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                testTextView.setText("That didn't work!");
            }
        });


        // Add the request to the RequestQueue.
        RequestQueue queue = Volley.newRequestQueue(SettingsActivity.this);
        queue.add(stringRequest);
    }
});  

NodeMCU,Lua:

station_cfg={}
station_cfg.ssid="Dom"
station_cfg.pwd="lalala"
wifi.sta.config(station_cfg)
function receive(conn, request)
        print(request)
        print()
        local buf = "";
        buf = buf.."<!doctype html><html>";
        buf = buf.."<h1> ESP8266 Web Server</h1>";
        buf = buf.."</html>";

        conn:send(buf);
        conn:on("sent", function(sck) sck:close() end);     
        collectgarbage();

end

function connection(conn) 
    conn:on("receive", receive) 

end

srv=net.createServer(net.TCP, 30) 
srv:listen(80, connection)
马塞尔·斯托尔

nPn 的代码适用于某些用户代理(macOS 上的 Chrome/Firfox/curl/wget),但不适用于其他用户代理(macOS 和 iOS 上的 Safari,iOS 上的 Firefox Klar)。这可能是由于缺少 HTTP 标头。

我建议您坚持我们在https://nodemcu.readthedocs.io/en/latest/en/modules/net/#netsocketsend文档中的示例

srv = net.createServer(net.TCP)

function receiver(sck, data)
  print(data)
  print()

  -- if you're sending back HTML over HTTP you'll want something like this instead
  local response = {"HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n"}

  response[#response + 1] = "<!doctype html><html>"
  response[#response + 1] = "<h1> ESP8266 Web Server</h1>"
  response[#response + 1] = "</html>"

  -- sends and removes the first element from the 'response' table
  local function send(localSocket)
    if #response > 0 then
      localSocket:send(table.remove(response, 1))
    else
      localSocket:close()
      response = nil
    end
  end

  -- triggers the send() function again once the first chunk of data was sent
  sck:on("sent", send)

  send(sck)
end

srv:listen(80, function(conn)
  conn:on("receive", receiver)
end)

此外,您的代码(以及与此相关的 nPn)假设 WiFi 在不该可用的地方可用。

wifi.sta.config(station_cfg)(使用 auto-connect=true)并且wifi.stat.connect异步的,因此是非阻塞的 - 与许多其他 NodeMCU API 一样。因此,您应该将上述代码放入一个函数中,并且只有在设备连接到 AP 并获​​得 IP 后才调用它。您可以通过例如STA_GOT_IP使用 WiFi 事件监视器注册事件回调来实现您会在https://nodemcu.readthedocs.io/en/latest/en/upload/#initlua找到一个非常详细的启动序列示例,该示例侦听所有 WiFi 事件对于初学者,您可能想要修剪它并只收听获得的 IP。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

android等待服务器的响应

来自分类Dev

Android:ListView选择器无法正常工作

来自分类Dev

Android启动画面计时器无法正常工作

来自分类Dev

Android:从服务器上的套接字接收空对象

来自分类Dev

为什么我得到Android:目标服务器无法响应?

来自分类Dev

如果从我们的服务器推送,Android Parse Notification无法接收通知

来自分类Dev

Android Studio AVD无法正常工作或无响应

来自分类Dev

计时器无法正常工作的Android

来自分类Dev

警报服务Android无法正常工作

来自分类Dev

无法处理对服务器的android post请求并接收返回给android的结果

来自分类Dev

NodeMCU HTTP服务器停止响应

来自分类Dev

Android 5.0.2-SMS广播接收器-无法正常工作

来自分类Dev

使用smack的Android XMPP:服务器无响应

来自分类Dev

Web服务器无法在android中工作

来自分类Dev

从Android发送SOAP请求。服务器响应:“服务器无法处理请求。”

来自分类Dev

android等待服务器的响应

来自分类Dev

无法在android中创建聊天室,并且未从服务器(tigase服务器)获得响应

来自分类Dev

Battery_Okay广播接收器无法正常工作。如何在Android上捕获Battery_Okay广播?

来自分类Dev

计时器无法正常工作的Android

来自分类Dev

Android从/向服务器发送和接收的最佳方法

来自分类Dev

Android如何使用Drupal服务器接收推送通知

来自分类Dev

Android:无法从服务器下载图像

来自分类Dev

将图像从android上传到php服务器无法正常工作

来自分类Dev

为什么我的Android客户端无法从Winsock C ++服务器接收字符串消息?

来自分类Dev

从Android应用发送GET请求时,NodeMCU服务器响应错误

来自分类Dev

Android在线服务器收到JavaScript响应而不是Json?

来自分类Dev

从Spring REST服务接收Android中的响应

来自分类Dev

Rx Android-等待服务器响应

来自分类Dev

来自服务器的部分 JSON 响应返回 null:Android

Related 相关文章

  1. 1

    android等待服务器的响应

  2. 2

    Android:ListView选择器无法正常工作

  3. 3

    Android启动画面计时器无法正常工作

  4. 4

    Android:从服务器上的套接字接收空对象

  5. 5

    为什么我得到Android:目标服务器无法响应?

  6. 6

    如果从我们的服务器推送,Android Parse Notification无法接收通知

  7. 7

    Android Studio AVD无法正常工作或无响应

  8. 8

    计时器无法正常工作的Android

  9. 9

    警报服务Android无法正常工作

  10. 10

    无法处理对服务器的android post请求并接收返回给android的结果

  11. 11

    NodeMCU HTTP服务器停止响应

  12. 12

    Android 5.0.2-SMS广播接收器-无法正常工作

  13. 13

    使用smack的Android XMPP:服务器无响应

  14. 14

    Web服务器无法在android中工作

  15. 15

    从Android发送SOAP请求。服务器响应:“服务器无法处理请求。”

  16. 16

    android等待服务器的响应

  17. 17

    无法在android中创建聊天室,并且未从服务器(tigase服务器)获得响应

  18. 18

    Battery_Okay广播接收器无法正常工作。如何在Android上捕获Battery_Okay广播?

  19. 19

    计时器无法正常工作的Android

  20. 20

    Android从/向服务器发送和接收的最佳方法

  21. 21

    Android如何使用Drupal服务器接收推送通知

  22. 22

    Android:无法从服务器下载图像

  23. 23

    将图像从android上传到php服务器无法正常工作

  24. 24

    为什么我的Android客户端无法从Winsock C ++服务器接收字符串消息?

  25. 25

    从Android应用发送GET请求时,NodeMCU服务器响应错误

  26. 26

    Android在线服务器收到JavaScript响应而不是Json?

  27. 27

    从Spring REST服务接收Android中的响应

  28. 28

    Rx Android-等待服务器响应

  29. 29

    来自服务器的部分 JSON 响应返回 null:Android

热门标签

归档