2016-04-21 91 views
0

我想从ESP8266和像www.httpbin.org这样的测试服务器上建立一个连接来获得一些数据。我一直在连接中遇到问题。 我使用的是非常简单的代码(不包括对本地WiFi明显的连接)的样子:NodeMCU中的DNS问题

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) 

我得到的结果是打印(SERVER_IP)返回

userdata: 3fff1b80 

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

+0

你需要更多的反馈?对你起作用吗? –

回答

0

你快到了。试试这个:

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回调有参数(套接字和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")