关于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这个变量的含义就不准确了,故还是采用第一种方法吧。
00
相似问题