3-STM32物聯(lián)網(wǎng)開發(fā)WIFI(ESP8266)+GPRS(Air202)系統(tǒng)方案升級篇(HTTP介紹,TCP實現(xiàn)HTTP下載文件)

https://www.cnblogs.com/yangfengwu/p/10357564.html


看了好多文章.....唉,還是自己親自動手用網(wǎng)絡(luò)監(jiān)控軟件測試吧


先看這個節(jié)安裝WEB服務(wù)器.....安裝好以后就可以用HTTP訪問電腦文件了


事先不知道HTTP,最后先看這個https://www.cnblogs.com/yangfengwu/p/10357564.html


其實HTTP就是建立在TCP通信上,然后自己又封裝了一套協(xié)議罷了,不過協(xié)議也不算多,協(xié)議內(nèi)容都是用字符串發(fā)送的,也好理解


感覺要比我以前自己用TCP實現(xiàn)MQTT協(xié)議簡單多了,MQTT規(guī)定的協(xié)議就是復(fù)雜點,全部用16進制組合......麻煩死了...


https://www.cnblogs.com/yangfengwu/p/9124299.html


大家學(xué)了這個文章,只要自己的模塊支持TCP,那么就可以實現(xiàn)用HTTP訪問下載文件,


廢話少說,我就下載我自己云端的這個文件















https://blog.csdn.net/runner_diego/article/details/51379116(這個是我在網(wǎng)上找的介紹http協(xié)議的)




?啟動個TCP客戶端


連接的ip地址選擇自己的哈? 我測試用的是??47.92.31.46? ? 端口號80? ? ?




GET /hardware/wifi1/updata1.lua HTTP/1.1Host: 47.92.31.46


?先看get的用法




GET,一個空格,訪問文件的路徑,一個空格,用哪個版本的HTTP協(xié)議


Host,冒號,一個空格,訪問的地址












然后咱看看發(fā)送和具體接收的數(shù)據(jù)


3:26:18 發(fā)送數(shù)據(jù):GET /hardware/wifi1/updata1.lua HTTP/1.1

Host: 47.92.31.46

[1次]

3:26:18 收到數(shù)據(jù):HTTP/1.1 200 OK

Date: Mon, 29 Apr 2019 19:26:19 GMT

Server: Apache/2.4.39 (Win64)

Last-Modified: Sat, 20 Apr 2019 15:48:39 GMT

ETag: "7ac-586f82b4b7b40"

Accept-Ranges: bytes

Content-Length: 1964

local model = "wifi1"? --product model

--[[Do not update the following program !!!!]]

local version1 = "0.0.0";

local version2 = "1.0.0";

if? file.open("version2.lua", "r") then--local

? ? version2 = file.read()

? ? file.close();

end

print("local version:"..version2)

local JsonTable = {};

function UpdataFun(client, topic, data,jsondata)

? ? if? jsondata["version"] ~= nil and jsondata["url"] ~= nil? then

? ? ? ? if? jsondata["version"] ~= version2? then

? ? ? ? ? ? version1 = jsondata["version"]


? ? ? ? ? ? JsonTable["data"] = "updata";

? ? ? ? ? ? JsonTable["status"] = "unlike";

? ? ? ? ? ? JsonTable["version"] = version2;


? ? ? ? ? ? if? file.open("url.lua", "w+") then

? ? ? ? ? ? ? ? file.write((jsondata["url"]))

? ? ? ? ? ? ? ? file.close()

? ? ? ? ? ? end

? ? ? ? ? ? print(jsondata["version"],jsondata["url"])

? ? ? ? else

? ? ? ? ? ? JsonTable["data"] = "updata";

? ? ? ? ? ? JsonTable["status"] = "alike";

? ? ? ? ? ? JsonTable["version"] = version2;? ?

? ? ? ? end

? ? ? ? client:publish(PublishTopic,sjson.encode(JsonTable), 0, 0, function(client) end)?

? ? ? ? JsonTable = {}?

? ? elseif? jsondata["cmd"] ~= nil and jsondata["cmd"] == "start" then

? ? ? ? ? ? if? file.open("version1.lua", "w+") then

? ? ? ? ? ? ? ? file.write(version1)

? ? ? ? ? ? ? ? file.close()

? ? ? ? ? ? end

? ? ? ? ? ? JsonTable["data"] = "updata";

? ? ? ? ? ? JsonTable["status"] = "start";

? ? ? ? ? ? print(data)

? ? ? ? ? ? client:publish(PublishTopic,sjson.encode(JsonTable), 0, 0, function(client) node.restart(); end)?

? ? ? ? ? ? JsonTable = {}

? ? elseif? jsondata["cmd"] ~= nil and jsondata["cmd"] == "model" then? ? ? ? ? ? ? ? ?

? ? ? ? ? ? JsonTable["data"] = "updata";

? ? ? ? ? ? JsonTable["status"] = "model";

? ? ? ? ? ? JsonTable["model"] = model;

? ? ? ? ? ? print(data)

? ? ? ? ? ? client:publish(PublishTopic,sjson.encode(JsonTable), 0, 0, function(client) end)?

? ? ? ? ? ? JsonTable = {}? ? ? ?

? ? end

end











其實就這么簡單就可以用HTTP訪問下載文件了




其實我學(xué)習(xí)用TCP實現(xiàn)HTTP功能是為了想用HTTP下載大文件,最終是為了實現(xiàn)遠程更新單片機程序,所以我為了讓程序穩(wěn)定可靠,我必須深入了解HTTP





先看用WIFI模塊自帶的HTTP API下載大文件




http.get("http://47.92.31.46/hardware/wifi1/Progect.hex", nil, function(code, data)

? ? if (code < 0) then

? ? ? print("HTTP request failed")

? ? else

? ? ? print(code, data)

? ? end

end)











?直接報錯說數(shù)據(jù)量太大


然而我用TCP調(diào)試助手發(fā)指令下載的時候發(fā)現(xiàn)了個問題





?第一 ? 下載下來了


第二 ? ?我監(jiān)聽了一下網(wǎng)絡(luò)數(shù)據(jù),發(fā)現(xiàn)





?其實Apache服務(wù)器默認(rèn)就會把大文件分段傳輸過來


然后我就做了個WIFI用TCP實現(xiàn)HTTP,然后下載


wifi.setmode(wifi.STATIONAP)

apcfg={}

apcfg.ssid="qqqqq"

apcfg.pwd="11223344"

wifi.sta.config(apcfg)

wifi.sta.autoconnect(1)

ClientConnectedFlage = 0

TcpConnect = nil

tmr.alarm(1, 10000, 1, function()

? ? if? ClientConnectedFlage == 0 then

? ? ? ? Client = net.createConnection(net.TCP, 0)

? ? ? ? Client:connect(80,"47.92.31.46")

? ? ? ? Client:on("receive", function(Client, data)

? ? ? ? ? ? uart.write(0,data)

? ? ? ? end)


? ? ? ? Client:on("connection", function(sck, c)

? ? ? ? ? ? ClientConnectedFlage = 1

? ? ? ? ? ? TcpConnect = Client

? ? ? ? ? ? print("Link OK")

? ? ? ? ? ? tmr.stop(1)

? ? ? ? ? ? Client:on("disconnection", function(sck, c)

? ? ? ? ? ? ? ? ClientConnectedFlage = 0

? ? ? ? ? ? ? ? TcpConnect = nil

? ? ? ? ? ? ? ? tmr.start(1)

? ? ? ? ? ? end)

? ? ? ? ? ? TcpConnect:send("GET /hardware/wifi1/Progect.hex HTTP/1.1\r\nConnection: keep-alive\r\nHost: 47.92.31.46\r\n\r\n")


? ? ? ? end)

? ? ? ? if? ClientConnectedFlage == 0 then

? ? ? ? ? ? print("Link Error")

? ? ? ? end

? ? end

end)

uart.on("data",0,function(data)


end, 1)

printip = 0

wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)

? ? printip = 0

end)

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)

? if printip == 0 then

? ? ? print("+IP"..T.IP)

? end

? printip = 1

end)







?毫無壓力的全部下載下來了.


所以我才知道,WIFI模塊里面寫的HTTP是把所有分段過來的數(shù)據(jù)全部接收到一個數(shù)組里面再調(diào)用回調(diào)....然而就會造成內(nèi)存不足


用TCP實現(xiàn)HTTP的時候是接收一段打印出來一段,并不是把所有的數(shù)據(jù)全部放到一個數(shù)組里面,然后打印.....


經(jīng)過這一次,我感覺我以后用HTTP的時候還是直接用TCP來實現(xiàn),主要還是很簡單,而且還能預(yù)防再次出現(xiàn)內(nèi)存問題....


https://www.cnblogs.com/yangfengwu/p/10410202.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末传藏,一起剝皮案震驚了整個濱河市晴楔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡济榨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門绿映,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擒滑,“玉大人,你說我怎么就攤上這事叉弦∝ひ唬” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵淹冰,是天一觀的道長库车。 經(jīng)常有香客問我,道長樱拴,這世上最難降的妖魔是什么柠衍? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮晶乔,結(jié)果婚禮上珍坊,老公的妹妹穿的比我還像新娘。我一直安慰自己瘪弓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布禽最。 她就那樣靜靜地躺著腺怯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪川无。 梳的紋絲不亂的頭發(fā)上呛占,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音懦趋,去河邊找鬼晾虑。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帜篇。 我是一名探鬼主播糙捺,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笙隙!你這毒婦竟也來了洪灯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤竟痰,失蹤者是張志新(化名)和其女友劉穎签钩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坏快,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡铅檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莽鸿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昧旨。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖富拗,靈堂內(nèi)的尸體忽然破棺而出臼予,到底是詐尸還是另有隱情,我是刑警寧澤啃沪,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布粘拾,位于F島的核電站,受9級特大地震影響创千,放射性物質(zhì)發(fā)生泄漏缰雇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一追驴、第九天 我趴在偏房一處隱蔽的房頂上張望械哟。 院中可真熱鬧,春花似錦殿雪、人聲如沸暇咆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爸业。三九已至,卻和暖如春亏镰,著一層夾襖步出監(jiān)牢的瞬間扯旷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工索抓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钧忽,地道東北人毯炮。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像耸黑,于是被迫代替她去往敵國和親桃煎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容