博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
广博带你玩esp8266-WIFI芯片(四)(lua开发)--WIFI芯片不通信有个啥用(TCP服务器、客户端)
阅读量:3952 次
发布时间:2019-05-24

本文共 2788 字,大约阅读时间需要 9 分钟。

没有啥用的目录

经过了前几次的练习,大家已经掌握了lua语言开发的ESP8266芯片的基本使用了吧,这一次我们就要用WIFI的热点与终端模式的TCP协议来通信,还可以控制点灯哦!

TCP协议是**传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,**由IETF的RFC 793 定义。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

TCP协议有两个模式,一个是客户端模式,一个是服务器模式

如果你选择服务器模式的话,就意味着你需要等待他人的链接,你需要持续监听某一个端口,当有人链接时你就可以通过链接后的通道进行通信。

如果你选择客户端模式的话,那这与服务器模式相反,你需要主动的链接其他人的某个端口,在连接成功后就可以通信。

值得注意的是 :TCP是面向链接的通信协议,所以每次通信需要建立链接后进行通信,如果中途断开链接,则需要重新进行链接才可以通信。

TCP服务器的使用

TCP服务器的创建

我们先建立TCP服务器。使用的API可以在官方的API网站查找。

在这里插入图片描述
代码的话就是:
表示创建了一个TCP的服务器,但是这还没完!你还需要监听一个端口,等待别人链接!

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

注册事件

在这里插入图片描述

监听端口:

在这里插入图片描述

代码:

意思是注册了接收信息时的回调函数,功能是打印出接收的值。

server:listen(8000,function(conn)    		conn:on("receive",function(client,payload) 				print("recv:"..payload)  			end)	end)

TCP服务器整体代码

因为TCP服务器是在有网的环境下才能使用,所以我们需要建立WIFI热点(不知道怎么办可以看上期,本期直接给出代码)

先创建WIFI热点并设置用户名密码,以及有人链接时的IP地址的分配的开始值
在串口打印热点的IP地址,
创建一个TCP服务器并设置监听8000端口,
注册接收到信息时在串口打印所接收的信息。

wifi.setmode(wifi.SOFTAP)wifi.ap.config({
ssid="@PHICOMM_D",pwd="123321000"})cfg ={
ip="192.168.1.1", netmask="255.255.255.0", gateway="192.168.1.1"}wifi.ap.setip(cfg)dhcp_config ={
}dhcp_config.start = "192.168.1.100"wifi.ap.dhcp.config(dhcp_config)wifi.ap.dhcp.start()print("AP_Ip is "..wifi.ap.getip()) server=net.createServer(net.TCP,30)server:listen(8000,function(conn) conn:on("receive",function(client,payload) print("recv:"..payload) end) end)

TCP服务器测试

效果图:

发送的hello world已经在串口打印出来了
在这里插入图片描述

TCP客户端的使用

与TCP服务器类似但是又简单了点,同样需要创建,但是创建的不是服务器了而是客户端了

创建TCP客户端

在这里插入图片描述

代码:

sock =  net.createConnection(net.TCP,0)

连接TCP服务器

在这里插入图片描述

代码:

sock:connect(8000,"192.168.1.100")

发送消息

在这里插入图片描述

代码:

sock:send("hello pc")

注册事件

在这里插入图片描述

代码:
注册接收函数,也有其他的事件,可以在官方API中查找
在这里插入图片描述

sock:on("receive",function(sck,data)           print(data)          end)

TCP客户端完整代码

wifi.setmode(wifi.SOFTAP)wifi.ap.config({
ssid="@PHICOMM_DC",pwd="123321000"})cfg ={
ip="192.168.1.1", netmask="255.255.255.0", gateway="192.168.1.1"}wifi.ap.setip(cfg)dhcp_config ={
}dhcp_config.start = "192.168.1.100"wifi.ap.dhcp.config(dhcp_config)wifi.ap.dhcp.start()print("AP_Ip is "..wifi.ap.getip()) arr={
}t = tmr.create()t:register(1000,tmr.ALARM_AUTO,function() arr=nil arr=wifi.ap.getclient() for mac,ip in pairs(arr) do print(mac,ip) t:stop() t:register(1000,tmr.ALARM_SINGLE,tcpclient) t:start() end returnend)t:start()function tcpclient() sock = net.createConnection(net.TCP,0) sock:connect(8000,"192.168.1.100") sock:send("hello pc") sock:on("receive",function(sck,data) print(data) end)end

TCP客户端测试

最后是TCP客户端的测试

使用时需要在连接WIFI后的5秒内打开TCPServer才能正确使用。
如果你不用WIFI的热点模式!只需要将WIFI芯片连接至WIFI后连接TCP服务器就可以,当然!需要改变IP地址,否则不能正确连接
在这里插入图片描述

转载地址:http://guewi.baihongyu.com/

你可能感兴趣的文章
android camera拍照/录像后查看图片/视频并删除所有内容后自动回到camera预览界面
查看>>
android 图库中对非mp4格式的视频去掉"修剪"功能选项
查看>>
how to disable watchdog
查看>>
android SDIO error导致wifi无法打开或者连接热点异常的问题
查看>>
android USB如何修改Serial Number or SN?
查看>>
android 用svn管理的版本编译出来有问题
查看>>
android 如何用jar包代替java代码编译
查看>>
android 数据连接关闭的情况下如何让彩信发不出去
查看>>
android 编辑彩信,加入几页铃声,预览暂停界面,铃声名字不见了
查看>>
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
android 关于LCD背光调节渐变过程引起背光闪烁问题
查看>>
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>
android 短信下,添加联系人,进入联系人多选界面出现联系人电话号码晃动的问题
查看>>
android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
查看>>
正确学习javascript。困惑的指南
查看>>
SERO幻影社区的背景怎么样?几大主流隐私币种技术分析!
查看>>
SERO目前具备的十大技术特点
查看>>
Neo4j CQL语句学习Day3
查看>>