2017-01-01 6 views
1

Использование NodeMCU для работы в качестве точки доступа Wi-Fi. Точка доступа работает, и я могу подключиться к ней, и когда я посещаю 192.168.4.1, print(payload), мой запрос печатается на консоль, так что все работает, но Safari на iOS жалуется, что сервер перестает отвечать.Сервер NodeMCU не отвечает

function initialConnection() 
    wifi.setmode(wifi.SOFTAP) 

    -- Setup as Access Point 
    print(wifi.ap.config({ 
     ssid = "SSIDNAME", 
     pwd = "SSIDPASSWORD", 
     auth = wifi.OPEN 
    })) 

    server = net.createServer(net.TCP, 30) 

    if server then 
    server:listen(80, function(conn) 
     conn:on("receive",function(conn,payload) 
     print(payload) 
     conn:send("<h1> Hello, NodeMCU!!! </h1>") 
     end) 
    end) 
    end 

    -- statusLed:flashBlue(100) 
end 

Это запрос, который печатается на консоль

GET /?gddf HTTP/1.1 
Host: 192.168.4.1 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1 
Accept-Language: en-us 
DNT: 1 
Cache-Control: max-age=0 
+1

Не уверен, если это делает никакой разницы, но во втором обратном вызове параметр сокета не должны» t будет называться 'conn', поскольку это« накладывается »на« conn »первого обратного вызова. Сделайте это как 'function (sck, payload) sck: send()'. –

+0

Из любопытства я напечатал [адрес] параметра соединения на каждом уровне вложения, т. Е. Print (conn) conn: on («sent», function (sck) print (sck) sck: close() end) end). Адрес объекта, переданного как conn, был таким же, как sck. Единственным объектом, у которого был другой адрес, был тот, который был передан обратному сообщению об отключении, они не соответствовали ни одному из значений, используемых в другом месте кода. –

ответ

1

тест это:

srv = net.createServer(net.TCP) 
srv:listen(80, function(conn) 
conn:on("receive", function(sck, payload) 
    print(payload) 
    sck:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, NodeMCU.</h1>") 
end) 
conn:on("sent", function(sck) sck:close() end)end) 
+1

Несмотря на то, что это правильный ответ (с нашей [стартовой страницы GitHub] (https://github.com/nodemcu/nodemcu-firmware/blob/master/README.md#programming-model)), это не очень хороший ответ, потому что он не объясняет, что было не так, или _why_ исходный код не работает. –

+0

Это действительно помогает, я проголосовал за ответ, если бы вы могли добавить краткое объяснение, почему/что я делаю неправильно, я могу принять его в качестве ответа. Это просто заголовок, который мне не хватало? –

+0

Вы не возвращали действительный ответ в соответствии с протоколом HTTP. Еще одно замечание: если вам понадобится, чтобы ответ был больше, чем один сетевой фрейм, включите заголовок Connection: close в ответе. Подсчет байтов для заголовка Content-length часто непрактичен, Connection: close сообщает запрашивающему хосту, что ответ сервера завершен, когда он закрывает соединение. –

Смежные вопросы