中级会员
 
- 积分
- 303
- 金钱
- 303
- 注册时间
- 2019-11-10
- 在线时间
- 61 小时
|
2金钱
硬件平台:STM32H743
软件平台:FreeRtos+lwip+Client+Socket
背景描述:
1:电脑做服务端、设备做客户端,设备开一个线程用作和服务端的交互;
2:线程创建,连接,通信没有问题,(服务器端使用网络调试助手);
目的1 : 读取数据的时候等待一下,比如等待100ms
目的2 :在不使用心跳包作为媒介,想要判断客户端和服务器的连接状态
因为目前使用的场景是,客户端可以不给服务器发数据,有可能一天都不发一次数据。但是会有可能把网线拔掉。或者把服务器关闭的情况
网络上查找各种方法:实际测试都没有效果:如下
配置不阻塞方式,(的确是不阻塞了,read() 只要是没有数据就立马返回-1,都不知道为什么不能延时)
源码:
#define LWIP_SO_RCVTIMEO 1
//配置不阻塞方式,
flag = 1;
iResult = ioctlsocket(sock, FIONBIO, &flag);
//设置接收超时
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
ret = setsockopt(sock, SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));
read(sock, &buff[0], sizeof(buff));
问1、:为什么在read()函数时没有等待10s再往下执行能???
问2: 如何判断客户端和服务器断开连接。
我在论坛里面找到了一份帖子,也提到了这个问题,但是没有贴出来解决办法
http://47.111.11.73/forum.php?mo ... cket%2B%B3%AC%CA%B1
|
|