
BearPi-HM_Nano开发板WiFi编程开发——TCP服务器 原创
BearPi-HM_Nano开发板WiFi编程开发——TCP服务器
本示例将演示如何在BearPi-HM_Nano开发板上使用socket编程创建TCP服务端,接收客户端消息并回复固定消息。
socket API分析
本案例主要使用了以下几个API完socket编程实验
socket()
描述:
在网络编程中所需要进行的第一件事情就是创建一个socket,无论是客户端还是服务器端,都需要创建一个socket,该函数返回socket文件描述符,类似于文件描述符。socket是一个结构体,被创建在内核中。
bind()
描述:
把一个本地协议地址和套接口绑定,比如把本机的2222端口绑定到套接口。注意:为什么在上图中客户端不需要调用bind函数?这是因为如果没有调用bind函数绑定一个端口的话,当调用connect函数时,内核会为该套接口临时选定一个端口,因此可以不用绑定。而服务器之所以需要绑定的原因就是,所以客户端都需要知道服务器使用的哪个端口,所以需要提前绑定
listen()
描述:
当socket创建后,它通常被默认为是主动套接口,也就是说是默认为要马上调用connect函数的,而作为服务器是需要被动接受的,所以需要调用linsten函数将主动套接口转换成被动套接口。调用linsten函数后,内核将从该套接口接收连接请求。
accept()
描述:
此函数返回已经握手完成的连接的套接口。注意:此处的套接口不同于服务器开始创建的监听套接口,此套接口是已经完成连接的套接口,监听套接口只是用来监听。
recv()
描述:
recv函数用来从TCP连接的另一端接收数据
send()
描述:
send函数用来向TCP连接的另一端发送数据。
软件设计
主要代码分析
完成Wifi热点的连接需要以下几步
- 通过
socket
接口创建一个socket,AF_INT
表示ipv4,SOCK_STREAM
表示使用tcp协议 - 调用
bind
接口绑定socket和地址。 - 调用
listen
接口监听(指定port监听),通知操作系统区接受来自客户端链接请求,第二个参数:指定队列长度 - 调用
accept
接口从队列中获得一个客户端的请求链接 - 调用
recv
接口接收客户端发来的数据 - 调用
send
接口向客户端回复固定的数据
编译调试
修改 BUILD.gn 文件
修改 applications\BearPi\BearPi-HM_Nano\sample
路径下 BUILD.gn 文件,指定 tcp_server
参与编译。
运行结果
示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志,会打印模块的本地IP,如本例程中的 192.1668.0.164
,并开始准备获取客户端的请求链接
使用 Socket tool 创建客户端用于测试。
在创建客户端后点击“连接”,在数据发送窗口输入要发送的数据,点击发送后服务端会回复固定消息,且开发板收到消息后会通过日志打印出来。
