TCP协议是**传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,**由IETF的RFC 793 定义。
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服务器是在有网的环境下才能使用,所以我们需要建立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服务器类似但是又简单了点,同样需要创建,但是创建的不是服务器了而是客户端了
sock = net.createConnection(net.TCP,0)
sock:connect(8000,"192.168.1.100")
sock:send("hello pc")
代码:
注册接收函数,也有其他的事件,可以在官方API中查找
sock:on("receive",function(sck,data)
print(data)
end)
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
return
end)
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客户端的测试
使用时需要在连接WIFI后的5秒内打开TCPServer才能正确使用。
如果你不用WIFI的热点模式!只需要将WIFI芯片连接至WIFI后连接TCP服务器就可以,当然!需要改变IP地址,否则不能正确连接