关于delayed设置的问题

来源:4-14 TCP文件传输系统-异步上传文件

weixin_慕丝2132731

2022-12-30

我感觉delayed这个变量设置的没啥用。
图片描述
while里写成true就行了吧,这个循环的终止是由strrecvbuffer里有无数据决定的。
图片描述

写回答

1回答

weixin_慕丝2132731

提问者

2022-12-31

今天发现delayed设置是有必要的,因为如果不设置,按下图的方式写,当客户端无文件可传时,

TcpRead(TcpClient.m_connfd,strrecvbuffer,&buflen,10)在等待10s后才返回false。之后客户端又会sleep(10),然后才会给服务端发送心跳包文,来保持连接,此时已经距离上次发送文件过去20多秒了,服务端的TcpServer.Read()超时时间timetvl+10,即20s。服务端在20s内没有收到客户端的心跳包文,就退出了,所以有两种解决方法:

1、设置delayed,由delayed决定循环的退出。

2、不设置delayed,延长服务端的超时时间,可以改成timetvl+25,之所以加25,是我实际测试过可行。

如果采用第二种方法,当客户端空闲时,发送心跳报文的时间间隔就变成TcpRead延迟的10s+sleep(timetvl),

感觉timetvl这个变量的含义就不准确了,故还是采用第一种方法吧。

https://img.mukewang.com/szimg/63afa79f093754f609870274.jpg

0
0

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程