<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn-NB-IOT-Air302-ForLua" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
提要
關於網絡通信:
每一台電腦都有自己的ip地址,每台電腦上的網絡應用程序都有自己的通信端口,
張三的電腦(ip:192.168.1.110)上有一個網絡應用程序A(通信端口5000),
李四的電腦(ip:192.168.1.220)上有一個網絡應用程序B(通信端口8000),
張三給李四發消息,首先你要知道李四的ip地址,向指定的ip(李四ip:192.168.1.220)發信息,
信息就發到了李四的電腦。
再指定一下發送的端口號(通信端口8000),信息就發到了李四電腦的網絡應用程序B上。
關於局域網和廣域網;
只能一個局域范圍內的網絡訪問就是局域網
列如:家庭里面一個路由器下設備之間通信(在一個路由器或者一個交換機下才能用的網絡打印機)
列如:一個學校,公司或組織這個區域內進行網絡通信的方式.
廣域網:
大范圍的基本上人人都能訪問的網絡.
列如:上網百度,現在的雲服務器,手機使用流量上網.
無論局域網還是廣域網,要想實現網絡通信,最實質的也是IP地址和端口號.
IP地址確定下來訪問的服務器,端口號確定下來服務器上的應用程序
說明
這節測試一下使用TCP客戶端連接TCP服務器.
因為是GPRS,所以只能是外網訪問(廣域網).
如果用戶想測試連接自己電腦上的TCP服務器,可以使用路由器或者花生殼映射(具體百度下吧)
這節測試程序連接的服務器是我的雲服務器上的Web服務器,然后發送HTTP GET指令獲取服務器文件數據.
程序
-- LuaTools需要PROJECT和VERSION這兩個信息 PROJECT = "adcdemo" VERSION = "1.0.0" -- 一定要添加sys.lua !!!! local sys = require "sys" sys.taskInit(function() -- 等待聯網 while not socket.isReady() do log.info("wait socket ready") sys.wait(1000) end -- 建立netclient對象 local netc = socket.tcp() netc:host("mnif.cn")--連接的服務器的IP地址 netc:port(80)--端口號 --連接成功回調 netc:on("connect", function(id, re) netc:send("GET /1.txt HTTP/1.1\r\nHost: mnif.cn\r\n\r\n") --發送數據給服務器 end) --接收數據回調 netc:on("recv", function(id, data) log.info("recv", data) end) netc:start();--啟動連接 end) -- 用戶代碼已結束--------------------------------------------- -- 結尾總是這一句 sys.run() -- sys.run()之后后面不要加任何語句!!!!!
注:關閉連接 netc:closed()
連接自己電腦上的TCP服務器
1.確定自己家的網絡是單獨拉的網線
2.打開網絡調試助手,打開服務器,端口號隨意,我設置的 8888
3.查看下自己電腦的IP地址
方案1 使用路由器映射(電腦連接了此路由器)
1.關閉防火牆
2.進入自家路由器,找到DMZ主機
3.在瀏覽器上面輸入IP,獲取到自家公網IP地址
4.測試一下使用上面的公網IP 223.... 端口號 8888 連接一下
如果連接成功說明可以了,就可以用GSM測試了!
如果不可以,百度下路由器端口映射 或者 看方式2
方案2 使用花生殼
1.搜索花生殼
2.下載並安裝,注冊,登錄
3.選擇映射配置
4.輸入先前注冊的賬號和密碼
5.添加映射
6.按照下面說明填寫
7.下面的意思是訪問 IP地址: 358n960z57.wicp.vip 端口號:57766
就能夠訪問到本機192.168.0.105 上的8888端口的服務器應用程序
8.測試
9.用戶可以修改程序測試
注:整個的通信流程實際上是把數據發送給了花生殼的服務器,然后花生殼的服務器
把數據發給了花生殼的客戶端,花生殼的客戶端又把數據發給了咱的調試助手.