合宙Air105|Socket|UDP |TCP/IP|W5500|TCP&UDP测试|服务器|客户端|官方demo|学习(8-2):Socket网络接口- UDP |TCP/IP连接示例

目录

基础资料

探讨重点

实现功能

硬件准备

接线:

软件版本

例程

软件使用

UDP(User Datagram Protocol)

TCP(Transmission Control Protocol)

W5500模块使用注意事项

需注意:

主要步骤为:

子程序中常规步骤:

AIR105+W5500模块 作为服务器,TCP模式示例

AIR105+W5500 模块作为服务器,UDP模式


基础资料

基于Air105开发板:Air105 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方Socket网络接口demo中UDP |TCP/IP连接示例(server_demo.lua)进行复现及分析,进行相关内容的学习及探讨。

实现功能

UDP |TCP/IP协议分析及Socket网络接口连接示例;

硬件准备

Air105开发板1块,面包板1块,W5500网络模块,导线若干。

接线:

W5500模块是标准SPI设备,可参考medlar:合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture:中SPI接口外置sd卡的接线方式。

W5500接线说明:

W5500管脚功能

air105对应管脚

air105管脚功能

MOSI

pin.PB04

SPI_2_MOSI

MISO

pin.PB05

SPI_2_MISO

SCLK

pin.PB02

SPI_2_CLK

SCS

pin.PB03

SPI_2_CSN

INT

pin.PC00

GPIO32

RST

pin.PE10

GPIO74

GND

GND

GND

VCC

3V3

3V3

PIN口设置:w5500.init(spi.SPI_2, 24000000, pin.PB03, pin.PC00, pin.PE10)。

W5500.config() --默认是DHCP模式

软件版本

AIR105:LuatOS@AIR105 base 22.10 bsp V0013

TCP&UDP测试工具

例程

"server_demo”(官方demo修改)

软件使用

接口文档可参考:socket网络接口

W5500模块数据手册V1.3版-单片机文档类资源-CSDN下载

w5500以太网驱动 - LuatOS 文档

UDP(User Datagram Protocol)

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

它有以下几个特点:

1、面向无连接,想发就发,不对数据报文进行任何操作

2、有单播,多播,广播的功能,一般仅做单播和组(广播)的区别,典型应用DNS服务器。

3、UDP是面向报文的

4、可靠性无法保障,通信不需要建立连接,想发就发,收到什么数据就传递什么数据,不会备份数据,发送数据也不会要求对方反馈。

再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

5、传递开销小,传输数据非常高效。适合时性要求高的场景(电话会议、流媒体等)

TCP(Transmission Control Protocol)

摘自TCP_通信百科 (c114.com.cn)

中文释义:(RFC-793)传输控制协议

该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。

传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC 793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。

综上,TCP克服了UDP的种种缺点,但由于服务器、客户端的确认握手开销,传输效率受网络传输效率等其他因素制约较为明显。

W5500模块使用注意事项

采用W5500模块,实现全硬件TCP/IP协议栈,支持TCP,UDP,ICMP,IPv4,ARP,IGMP,PPPoE等多种协议,使用较为便捷。官方socket网络接口库及社区W5500库又对网络操作进行了封装,便于开发人员调用。

需注意:

1 关于内网测试的IP

W5500IO 模块的 IP 与测试 PC 机的 IP 处 在同一网段内,且不冲突。

2. MAC 首字节必须为偶数 ,且局域网内 MAC 地址不能冲突 。

3. 与 PC 机进行通信测试时, 建议先 关闭防火墙 和无线网卡 。

4 如果使用 C 类固定 IP 地址,推荐主机编号应大于 200 ,避免 IP 冲突可能。

5. socket 收发缓存需按芯片要求进行配置,具体请参考W5500 数据手册 。

socket网络接口库对TCP连接的步骤均按协议标注进行了封装,直接调用,详见官方demo(根据调试需要,对例程有修改)。

主要步骤为:

  1. SPI硬件初始化:
w5500.init(spi.SPI_2, 24000000, pin.PB03, pin.PC00, pin.PE10)

2、IP及DNS配置

DHCP模式(如:通过路由器接入,具备DHCP功能):

-- w5500.config() --默认是DHCP模式,免配置可直接使用
-- w5500.bind(socket.ETH0)  --config之后需要立即bind

静态模式:

--测试server模式的话,建议用静态IP和静态DNS,当然不是强制的
--设置静态IP和DNS后,log输出中显示手工设定IP,速度忧于DHCP
w5500.config("192.168.1.210","255.255.255.0","192.168.1.1",string.fromHex("d1f17f7f97ae6bea"))
w5500.bind(socket.ETH0)

3、main()主程序调用实例子程序实现功能

require "server_demo"

子程序中常规步骤:

  1. 连接定义:
       netc = socket.create(socket.ETH0, dName)
       socket.config(netc, port) 
local function serTask(port)
       local tx_buff = zbuff.create(1024)
       local rx_buff = zbuff.create(1024)
       local netc
       local result, param, is_err, rIP, rPort
       netc = socket.create(socket.ETH0, dName)
       socket.config(netc, port)

2、建立连接,实现“握手

              result = libnet.waitLink(dName, 0, netc)
              result = libnet.listen(dName, 0, netc)
              if result then
            result,_ = socket.accept(netc, nil)    --W5500的硬件协议栈不支持一对多

3、连接成功确认及收发报文处理程序(基于消息传递的回调函数或标志定义)

if result then
                log.info("客户端连上了")
                libnet.tx(dName, 0, netc, "helloworld")
end

4、关闭连接,断开TCP,关闭连接

libnet.close(dName, 5000, netc)

5、程序处理协程

function SerDemo(port)
       sysplus.taskInitEx(serTask, dName, netCB, port)
end

AIR105+W5500模块 作为服务器,TCP模式示例

采用DHCP模式,直连入客户端所在网络的路由器。

连接成功、网络硬件正常的log:

[2022-12-20 15:42:09.474] main 664:bootloader build release Dec 14 2022 19:45:43!
[2022-12-20 15:42:09.474] Jump_AppRun 76:jump to 0x01010400 !
[2022-12-20 15:42:09.480] main 188:APP Build release Dec 14 2022 19:45:19!
[2022-12-20 15:42:09.480] I/main LuatOS@AIR105 base 22.12 bsp V0013 32bit
[2022-12-20 15:42:09.480] I/main ROM Build: Dec 14 2022 19:45:26
[2022-12-20 15:42:09.480] D/main loadlibs luavm 204792 15344 15344
[2022-12-20 15:42:09.480] D/main loadlibs sys   402120 51112 51616
[2022-12-20 15:42:09.521] w5500_ip_state 1115:ip 0 -> 1
[2022-12-20 15:42:09.523] w5500_ip_state 1115:ip 0 -> 1
[2022-12-20 15:42:09.631] w5500_link_state 1074:link 0 -> 1
[2022-12-20 15:42:09.631] w5500_nw_state 980:network ready

程序定义,连接成功后发送报文:

            if result then
                log.info("客户端连上了")
                libnet.tx(dName, 0, netc, "helloworld")
            end

也可采用静态IP和DNS形式,如:

--设置静态IP和DNS后,log输出中显示手工设定IP,速度忧于DHCP
w5500.config("192.168.1.210","255.255.255.0","192.168.1.1",string.fromHex("d1f17f7f97ae6bea"))
w5500.bind(socket.ETH0)

采用静态IP后,接收到网络内其他客户端的请求,

连接后LOG实例:

[2022-12-20 15:34:17.162] w5500_link_state 1074:link 0 -> 1
[2022-12-20 15:34:17.162] w5500_nw_state 980:network ready
[2022-12-20 15:34:34.975] w5500_sys_socket_callback 1510:socket 3 connected
[2022-12-20 15:34:34.977] w5500_socket_accept 1997:client 192.168.1.117, 61760
[2022-12-20 15:34:34.977] I/?:0     客户端连上了
[2022-12-20 15:34:34.977] I/?:0     402120    63624      64736
[2022-12-20 15:34:39.985] I/?:0     402120    63624      64736
[2022-12-20 15:34:45.027] I/?:0     402120    63624      64736

客户端参数配置:

连接后,消息发送示例:

正常建立TCP连接后,服务器应答helloworld。发送的字符串传输至服务器。

收到的数据长度:

[2022-12-20 15:38:00.461] I/?:-2145632226 收到客户端数据,长度      11
[2022-12-20 15:38:00.461] I/?:0     402120    63624      65904

AIR105+W5500 模块作为服务器,UDP模式

基本程序与TCP相同,不同点为:

1config参数不同:

socket.config(netc, port, true)  --true :UDP连接开关

2、服务器采用广播地址:

     result = libnet.waitLink(dName, 0, netc)  -- network_default_socket_callback 2907:f2000000,-1,硬件离线,等待硬件上线
       if result then
            result = libnet.connect(dName, 5000, netc,"255.255.255.255",0)    --W5500的硬件协议栈不支持一对多,port为任意数字,对端端口号不限制

UDP服务器配置:

UDP服务开启后log:

[2022-12-20 15:56:53.755] network_default_socket_callback 2907:f2000000,-1,硬件离线,等待硬件上线
[2022-12-20 15:56:53.755] network_default_socket_callback 2911:f2000000,-1,硬件离线,等待硬件上线
[2022-12-20 15:56:53.755] w5500_ip_state 1115:ip 0 -> 1
[2022-12-20 15:56:53.785] network_default_socket_callback 2907:f2000000,-1,硬件离线,等待硬件上线
[2022-12-20 15:56:53.785] network_default_socket_callback 2911:f2000000,-1,硬件离线,等待硬件上线
[2022-12-20 15:56:53.785] w5500_ip_state 1115:ip 0 -> 1
[2022-12-20 15:56:53.895] w5500_link_state 1074:link 0 -> 1
[2022-12-20 15:56:53.895] network_default_socket_callback 2907:f2000001,-1,硬件离线,等待硬件上线
[2022-12-20 15:56:53.895] network_default_socket_callback 2911:f2000001,1,正在连接,等待连接完成
[2022-12-20 15:56:53.895] w5500_nw_state 980:network ready
[2022-12-20 15:56:53.895] network_default_socket_callback 2873:f2000009,1,正在连接,等待连接完成
[2022-12-20 15:56:53.895] network_default_socket_callback 2877:f2000011,1,在线,等待任意网络变化
[2022-12-20 15:56:58.915] I/?:-1    402120    63688      64832

建立连接显示硬件在线后,可以进行通讯。

Log文件显示接收到的客户端数据长度及IP,端口等基本信息。

[2022-12-20 16:09:54.028] I/?:-1    402120    63656      64832

[2022-12-20 16:09:54.764] I/?:-1    收到客户端数据,长度      9       192.168.1.117 58996
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: W5500是一款集成了以太网控制器和TCP/IP协议栈的芯片,它支持以太网和TCP/IP协议。它可以通过SPI接口连接到微控制器或单片机,实现网络通信功能。W5500具有高速的数据处理能力和低功耗的特点,同时支持多种协议,包括TCPUDPIP、ICMP、ARP等。它可以广泛应用于物联网、工业自动化、智能家居等领域。 ### 回答2: W5500是一个硬件以太网控制器,它支持以太网和TCP/IP协议。以太网是一种局域网技术,用于在不同计算机之间进行数据通信。W5500通过以太网接口连接到局域网,并能够通过TCP/IP协议栈实现网络通信。TCP/IP是一组用于在网络上进行通信的协议,它包括TCP(传输控制协议)和IP(互联网协议),用于在Internet上可靠传输数据。W5500内部集成了TCP/IP协议栈,具备网络通信功能。因此,通过W5500,用户可以实现以太网连接,并使用TCP/IP协议进行数据通信。无论是连接到互联网还是局域网,W5500都具备直接实现以太网和TCP/IP通信的功能,并为用户提供了方便的网络连接解决方案。 ### 回答3: W5500是一种用于嵌入式系统的硬件网络模块,它同时支持以太网和TCP/IP协议。以太网是一种计算机网络技术,通过局域网连接多台计算机,实现数据传输和共享资源。而TCP/IP是一组互联网通信协议,用于在计算机网络中传输数据。 W5500通过支持以太网协议,可以实现设备和局域网中的其他设备之间的通信。它能够通过以太网接口与局域网中的其他设备进行数据传输和通信,实现设备之间的数据交换和共享。 W5500同时支持TCP/IP协议,这意味着它可以使用TCP/IP协议栈来进行数据传输和通信。TCP/IP协议栈是一组用于在互联网上进行数据传输的通信协议,包括TCP(传输控制协议)和IP(互联网协议)等。通过支持TCP/IP协议,W5500可以实现设备与互联网之间的通信,连接到Internet上的其他设备,并进行数据的传输和通信。 综上所述,W5500既支持以太网协议,能够实现设备和局域网中其他设备的通信,又支持TCP/IP协议栈,能够实现设备与互联网上的其他设备之间的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值