OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3490|回复: 8

esp32端口监听阻塞函数问题,网络通信,上位机发多次指令,esp32只能接收一次,求大佬指导一二,先谢谢了。

[复制链接]

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
发表于 2018-9-18 09:41:05 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 程功之道 于 2018-9-18 10:04 编辑

esp32作为STA模式连路由器,我电脑也是路由器的网,现在我电脑里的软件上位机作为客户端连接esp32,上位机通过esp32连路由器获得的IP地址和端口监听端口号进行连接通信,现在问题是上位机能连esp32了,也能发指令,我上位机发指令,esp32下位机接收到后打印信息,但是我上位机连发多次指令,只打印一次,查了下是accept函数阻塞了,大佬们有什么办法解决,很急,谢谢大佬们的指导~~~~

端口监听

端口监听

accept阻塞函数

accept阻塞函数
上位机和esp32.jpg

最佳答案

查看完整内容[请看2#楼]

问题解决了 在线程里面又开了个线程 因为网络不想串口啥的有中断,所以必须要用到阻塞函数,来等待数据和新的连接到来 之前对线程不太理解的透彻 现在明白了
我是小白,很白很白的小白!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-18 09:41:06 | 显示全部楼层
问题解决了  在线程里面又开了个线程   因为网络不想串口啥的有中断,所以必须要用到阻塞函数,来等待数据和新的连接到来    之前对线程不太理解的透彻  现在明白了
我是小白,很白很白的小白!!!
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-18 10:06:07 | 显示全部楼层
给自己顶一下
我是小白,很白很白的小白!!!
回复

使用道具 举报

12

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2017-8-4
在线时间
38 小时
发表于 2018-9-18 10:25:39 | 显示全部楼层
setsocketopt函数可以设置timeout
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-18 10:46:02 | 显示全部楼层
smiletudy 发表于 2018-9-18 10:25
setsocketopt函数可以设置timeout

不用accept函数,直接用这个函数吗?
我是小白,很白很白的小白!!!
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-18 10:48:40 | 显示全部楼层
smiletudy 发表于 2018-9-18 10:25
setsocketopt函数可以设置timeout

查了下在阻塞函数中,调用作用不大
1537238851(1).jpg
我是小白,很白很白的小白!!!
回复

使用道具 举报

12

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2017-8-4
在线时间
38 小时
发表于 2018-9-18 11:27:11 | 显示全部楼层
accept是接收客户端链接的函数,你收数据只能收到一条,确定是accept出问题? 收数据用的是read或者recv函数
另外设置非阻塞用ioctrl函数,如果接收超时你用setsockopt函数,另外我自己写过select实现的并发服务器,并没有遇到这个问题,先把linux的api接口弄清楚
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-18 11:49:06 | 显示全部楼层
本帖最后由 程功之道 于 2018-9-18 11:50 编辑
smiletudy 发表于 2018-9-18 11:27
accept是接收客户端链接的函数,你收数据只能收到一条,确定是accept出问题? 收数据用的是read或者recv函 ...

是的  开始上位机客户端连接esp32,然后发了一次之后,就不打印信息啦,我在accept函数后面和前面打印都打印不了 ;原理都懂了,esp32先连接路由器获取ip,然后再端口监听啦,可以发你的例程看看吗?大佬  
我是小白,很白很白的小白!!!
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4932
金钱
4932
注册时间
2017-7-6
在线时间
722 小时
 楼主| 发表于 2018-9-19 09:37:02 | 显示全部楼层
smiletudy 发表于 2018-9-18 11:27
accept是接收客户端链接的函数,你收数据只能收到一条,确定是accept出问题? 收数据用的是read或者recv函 ...

大佬 能不能看看指导一二    我刚接触linux  公司就让我做这个案子  以前做8位和32位单片机的,确认了就是accept阻塞了,我在accept函数后面加了个while(1),就可以连发  但是上位机断开连接,再连接就识别不到新的连接了   大佬 有什么好的方法
我是小白,很白很白的小白!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 01:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表