2017-01-01 15 views
1

NodeMCUを使用して無線LANアクセスポイントとして機能する。アクセスポイントが動作していて、私はそれに接続できます。私が192.168.4.1にアクセスしたとき、print(payload)私の要求はコンソールに表示されるので、すべて動作していますが、iOS上のSafariはサーバーが応答を停止していると訴えています。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

それはどんな違いがあれば必ずしかし、2番目のコールバックのソケットパラメータshouldn」ではありませんこれは最初のコールバックの「conn」で「オーバーレイ」されるので、「conn」と呼ばれます。 'function(sck、payload)sck:send()'のようにしてください。 –

+0

私はネスティングの各レベルでconnectionパラメータの[address]を表示しました。つまり、print(conn):on( "sent"、function(sck)print(sck)sck:close )。 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

正解(Googleの[GitHubスタートページ](https://github.com/nodemcu/nodemcu-firmware/blob/master/README.md#programming-model)から)が正しい回答ではありますが、それは良い答えではありません何が間違っていたのか、元のコードが機能しないのかを説明していません。 –

+0

それは私が間違っていた理由/理由を簡単に説明することができれば答えに投票しました。私は答えとしてそれを受け入れることができます。それは私が行方不明だったヘッダーのものですか? –

+0

HTTPプロトコルに従って、有効な応答が返されませんでした。もう1つの注意点として、応答が単一のネットワークフレームより大きくなる必要がある場合は、応答にConnection:closeヘッダーを含めます。 Content-lengthヘッダーのバイト数をカウントすることは、実際的ではありません。Connection:closeは、接続を閉じるときにサーバーの応答が完了したことを要求元のホストに伝えます。 –