windows socket编程中,recv()函数的耗时问题

[复制链接]
查看11 | 回复0 | 2021-1-27 05:48:45 | 显示全部楼层 |阅读模式
我用windowssocket编程从FTP服务器上多线程读取多个文件到本地内存(注:这里每个线程读取指定的多个文件,如某个线程指定读取文件名为test00-test99的jpg文件),每个线程函数的基本过程有:
1、客户端创建套接字sockCmd,填充服务器端ip、21号端口和AF_INET协议族;
connect()连接服务器,recv(sockCmd)接收连接成功的相关信息;
send(sockCmd)向服务器发送“USERanonymous\r\n”命令,recv()接收允许匿名登陆输入密码的相
关信息;
send(sockCmd)向服务器发送“PASS\r\n”命令,recv()接收匿名登陆成功的相关信息;
FTP命令传输通道创建成功。
2、for(test00-test99),一个大循环,读取指定的多个文件(test00-test99的jpg文件)。
在读取某一个文件时:
3、send(sockCmd)向服务器发送“PASV\r\n”命令,recv(sockCmd)获取服务器提供客户端进行数据传输
通道连接的端口port;
客户端创建套接字sockData,填充服务器端ip、新端口port和AF_INET协议族;
connect()连接服务器。
4、send(sockCmd)向服务器发送“TYPEI\r\n”命令,将数据传输模式设置成二进制传输方式;
recv(sockCmd)接收设置传输方式成功的相关信息。
5、send(sockCmd)向服务器发送“RETRtest00.jpg”命令,选择文件,启动下载;
recv(sockCmd)接收文件开始下载的相关信息。
6、do{
readSize=recv(sockData,buf,sizeof(buf),0);
}while(readSize)//读取文件。
7、closesocket(sockData);
recv(sockCmd)接收某个文件读取完成的相关信息。
当所有文件(test00-test99)都读取完毕时:
8、send(sockCmd)向服务器发送“QUIT\r\n”命令;
recv(sockCmd)接收与服务器成功断开连接的相关信息;
closesocket(sockCmd)。
在用于接收数据的buffer[]的大小足够都为512字节的前提下,我现在的问题是:
为什么在第7步recv()接收某个文件读取成功信息的耗时总是大于其他步骤里recv()接收信息的耗时?这里第7步recv()接收的字符串数据也并非最长,其他步骤里的recv()耗时几乎为0,而第7步recv()则需要0.1秒,这样的话,如果我读取1000个文件,岂不是都把时间耗在第7步的recv()上了,耗时的计算我用的是recv()前后clock()相减。

分 -->
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行