2016-04-21 2 views
0

Я пытаюсь просто подключиться к ESP8266 и тестовому серверу, например, www.httpbin.org, чтобы получить некоторые данные. У меня проблемы с подключением. Я использую очень простой код, который (за исключением очевидного подключения к локальной Wi-Fi) выглядит следующим образом:Проблемы с DNS в NodeMCU

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) 

Я изменил две вещи:

  • согласно docs обратного вызова для net.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") 
Смежные вопросы