【问题标题】:Problems with DNS in NodeMCUNodeMCU中的DNS问题
【发布时间】:2016-08-15 02:32:17
【问题描述】:

我正在尝试从 ESP8266 和像 www.httpbin.org 这样的测试服务器建立连接以获取一些数据。我一直在连接中遇到问题。 我正在使用一个非常简单的代码(不包括与本地 WiFi 的明显连接)如下所示:

net.dns.setdnsserver("8.8.8.8",1)
net.dns.resolve("httpbin.org", function(server_ip)
    if (server_ip == nil) then print("DNS fail!") else

        print(server_ip)

        conn=net.createConnection(net.TCP, 0)

        conn:on("receive", function(conn, payload) 
                        print('\nReceived\n')
                        print(payload)
                        end )

        conn:on("connection", function(conn, payload) 
                        print('\nConnected') 
                        conn:send("HTTP/1.1\r\n"
                        .."Host: httpbin.org/get\r\n"
                        .."Connection: keep-alive\r\n"
                        .."Accept: */*\r\n\r\n")
                       end) 

        conn:connect(80, server_ip)

        end
    end)

我得到 print(server_ip) 返回的结果

userdata: 3fff1b80

连接挂起(我从来没有打印任何消息)。我究竟做错了什么?谢谢。

【问题讨论】:

  • 您需要更多反馈吗?它对你有用吗?

标签: esp8266 nodemcu


【解决方案1】:

你快到了。试试这个:

net.dns.setdnsserver("8.8.8.8", 1)
net.dns.resolve("httpbin.org", function(sk, server_ip)
    if (server_ip == nil) then print("DNS fail!") else

        print(server_ip)

        conn = net.createConnection(net.TCP, 0)

        conn:on("receive", function(conn, payload)
            print("Received: " .. payload)
        end)

        conn:on("connection", function(conn, payload)
            print("Connected")
            conn:send("GET /get HTTP/1.1\r\n"
                    .. "Host: httpbin.org\r\n"
                    .. "Connection: keep-alive\r\n"
                    .. "Accept: */*\r\n\r\n")
        end)

        conn:connect(80, server_ip)
    end
end)

我改变了两件事:

  • 根据docsnet.dns.resolve 的回调有 2 个参数(套接字和 IP 地址)
  • HTTP 标头错误:
    • host真的只是主持人
    • 但是缺少 HTTP 动词和路径,它是 GET /get HTTP/1.1

当然,您也可以将其简化为:

conn = net.createConnection(net.TCP, 0)

conn:on("receive", function(conn, payload)
    print("Received: " .. payload)
end)

conn:on("connection", function(conn, payload)
    print("Connected")
    conn:send("GET /get HTTP/1.1\r\n"
            .. "Host: httpbin.org\r\n"
            .. "Connection: keep-alive\r\n"
            .. "Accept: */*\r\n\r\n")
end)

conn:connect(80, "httpbin.org")

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2016-04-01
    • 2021-07-23
    • 2016-10-22
    • 2016-11-07
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多