协议层支持:IP(InternetProtocol,IPv4andIPv6)includingpacketforwardingovermultiplenetworkinterfacesICMP(InternetControlMessageProtocol)fornetworkmaintenanceanddebuggingIGMP(InternetGroupManagementProtocol)formulticasttrafficmanagementMLD(MulticastlistenerdiscoveryforIPv6).AimstobecompliantwithRFC2710.NosupportforMLDv2ND(NeighbordiscoveryandstatelessaddressautoconfigurationforIPv6).AimstobecompliantwithRFC4861(Neighbordiscovery)andRFC4862(Addressautoconfiguration)UDP(UserDatagramProtocol)includingexperimentalUDP-liteextensionsTCP(TransmissionControlProtocol)withcongestioncontrol,RTTestimationandfastrecovery/fastretransmitraw/nativeAPIforenhancedperformanceOptionalBerkeley-likesocketAPIDNS(Domainnamesresolver)
Apachelicensev2.0
使能TCPIP是1,不使能TCPIP是0,默认是1,可修改YAML配置如
def_config:CONFIG_TCPIP:1
使用AOS的LwIP是1,不实用AOS的LwIP是0,默认是1,可修改YAML配置如:
def_config:CONFIG_AOS_LWIP:1
使能LwIP数据包打印功能是1,不使能是0,默认1,可修改YAML配置如:
def_config:WITH_LWIP_PKTPRINT:1
intsocket(intdomain,inttype,intprotocol);args
description
domain
协议域
type
类型
protocol
传输协议
intbind(ints,conststructsockaddr*addr,socklen_tnamelen)args
s
要绑定的socket描述符
addr
一个指向含有本机IP地址和端口号等信息的sockaddr结构的指针
namelen
sockaddr结构的长度
intlisten(ints,intbacklog)args
backlog
连接请求队列可以容纳的最大数目
intaccept(ints,structsockaddr*addr,socklen_t*addrlen)args
socket描述符
intconnect(ints,conststructsockaddr*name,socklen_tnamelen)args
name
指向sockaddr结构的指针,存放要连接的服务器的IP地址和端口号等信息
sockaddr结构体的长度
intsend(ints,constvoid*dataptr,size_tsize,intflags)args
dataptr
指向所要发送的数据区的指针
size
要发送的字节数
flags
控制选项,通常为0
intrecv(ints,void*mem,size_tlen,intflags)args
mem
指向存储数据的内存缓存区的指针
len
缓冲区的长度
intsendto(ints,constvoid*dataptr,size_tsize,intflags,conststructsockaddr*to,socklen_ttolen)args
to
指向sockaddr结构体的指针,存放目的主机的IP和端口号
tolen
intrecvfrom(ints,void*mem,size_tsize,intflags,structsockaddr*from,socklen_t*fromlen)args
from
指向sockaddr结构体的指针,存放源主机的IP和端口号
fromlen
指向sockaddr结构体的长度的指针
intselect(intmaxfdp1,fd_set*readset,fd_set*writeset,fd_set*exceptset,structtimeval*timeout)args
maxfdp1
最大的文件描述符
readset
读文件描述符
writeset
写文件描述符
exceptset
异常的文件描述符
timeout
intclosesocket(ints)args
intshutdown(ints,inthow)args
how
控制选项
structhostent*gethostbyname(constchar*name)args
主机域名
intgetsockname(ints,structsockaddr*name,socklen_t*namelen)args
sockaddr结构体指针,用来存储得到的主机信息
intgetpeername(ints,structsockaddr*name,socklen_t*namelen)args
intioctlsocket(ints,longcmd,void*argp)args
cmd
套接字操作命令
argp
操作命令所带参数
intgetsockopt(ints,intlevel,intoptname,void*optval,socklen_t*optlen)args
level
选项定义的层次;目前支持SOL_SOCKET,SOL_PACKET,IPPROTO_IP和IPPROTO_TCP
optname
需设置的选项
optval
指向option属性的指针
optlen
指向option属性长度的指针
intsetsockopt(ints,intlevel,intoptname,constvoid*optval,socklen_toptlen)args
option属性的长度
打开已有工程
创建新的工程
案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:
depends:-netmgr:dev_aos#添加netmgr依赖,使用netmgr连接wifi-lwip:dev_aos#helloworld_demo中引入lwip组件步骤3下载组件在已安装了的开发环境工具栏中,选择Terminal->NewTerminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
aosinstalllwip上述命令执行成功后,组件源码则被下载到了./components/lwip路径中。
当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
netmgr_example#启动netmgr组件netmgr-twifi-cwifissidwifipassword#输入ssid和密码
CLI命令行输入udp测试命令:
test_udp
输入联网命令后的WIFI联网成功日志:
GotIP
启动test_udp之后的数据接收打印:
test_udp(cli-uart)#helloworld!count15recv:helloUDPhelloworld!count16recv:helloUDPhelloworld!count17recv:helloUDPhelloworld!count18recv:helloUDPhelloworld!count19recv:helloUDP注意事项测试示例
CLI命令行输入ping测试命令
CLI命令行输入查看设备网络接口的配置信息命令
ifconfig
CLI命令行输入tftp向服务器获取文件命令
tftpserver
CLI命令行输入iperf测试网络性能
关键日志
ping成功收到数据包日志
LwIP_recv
ifconfig成功查看设备网络接口的配置信息日志
en1up,address:192.168.0.102gateway:192.168.0.1netmask:255.255.255.0lo0up,address:127.0.0.1gateway:127.0.0.1netmask:255.0.0.0
tftp成功获取文件日志
tftpreceivedlen:92done
iperf测试日志
TCPServerBandwidth:8Mbits716Kbits848bits/secUDPServerBandwidth:10Mbits60Kbits344bits/secTCPClientBandwidth:5Mbits1023Kbits928bits/secUDPClientBandwidth:22Mbits907Kbits160bits/sec