- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程入门篇
Select:非阻塞Socket 编程
目录
• 基础知识
• 具体示例
• 注意事项
• 示例代码讲解
基础知识
基础知识
• 在RT-Thread 使用socket 网络编程时,由于socket 的recv 和
send 的实现是阻塞式的,因此当一个任务调用recv() 函数接收数
据时,如果socket 上并没有接收到数据,这个任务将阻塞在recv()
函数里。这个时候,这个任务想要处理一些其他事情,就变得不可
能了。
• 因此,在要求网络传输的同时,还能处理其他的数据的场景下,就
需要用到select 了,select 能够同时监视多个非阻塞socket 的多
个事件,这对于以上问题的解决有着重要的意义。
基础知识
• 下面我们先介绍一下select 的API ,然后展示select 使用时的流程,
接着用一个简单的示例程序,给大家具体的展示select 函数的基本
用法,最后讲解一下示例程序。
• 在掌握select 的基本用法之后,就可以从下面的应用笔记中找到
socket 非阻塞编程的具体方法了。
• 应用笔记:基于多线程的非阻塞socket 编程
select API 说明
int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);
参数 描述
nfds 集合中所有文件描述符的范围,即所有文件描述符的最大值加1
readfds 需要监视读变化的文件描述符集合
writefds 需要监视写变化的文件描述符集合
errorfds 需要监视出现异常的文件描述符集合
timeout select 的超时时间
返回值 描述
正值 监视的文件集合出现可读写事件或异常事件
0 等待超时,没有可读写或异常的事件
负值 select 出现错误
使用流程
Select 的使用流程如右图所示:
– 定义fd_set 结构体
– 计算maxfdp1
– FD_ZERO
– FD_SET
– Select
– FD_ISSET
具体示例
工程配置
• RT-Thread samples 软件包中已有一份该示例代码tcpclient_select .c,可以通
过env 配置将示例代码加入到项目中。
• 按照下面的路径即可开启select 的示例代码
RT-Thread online packages
miscellaneous packages
samples: RT-Thread kernel and components samples
[*] a network_samples package for rt-thread
[*] [network] tcp client by select api
• 保存并更新软件包pkgs --update
• 编译工程scons
• 然后运行qemu
开启TCP服务器
• 在运行示例代码之前需要先在电脑上开启一个TCP 服务器,这里以网络调试
助手IPOP 为例。
查看本机ip地址
• 在windows系统中打开命令提示符,输入ipconfig 即可查看本机ip
运行示例代码
• 在qemu运行起来后,在msh 命令行下输入下面的命令即可让示例代码运行。
msh tcpclient_select 192.168.12.44 5000
• tcpclient_select 有两个参数URL P
文档评论(0)