在网上看到一段代码,关于socket传输文件,选取了其中的主函数部分,main函数中第一个if语句的条件想表达什么啊,没有看懂
#include <iostream>
#include <iomanip>
#include "client.h"
#include "timer.h"
using namespace std;
// 帮助函数,传入argv第一个字符指针
void help(const char *name) {
// 裁切掉文件路径,保留文件名
std::string progname = name;
size_t lastPos = progname.find_last_of("/\\");
progname = progname.substr(lastPos + 1);
cout << ".\\" << progname << " [IP Address] [Port] [FilePath_1] [FilePath_2] ..." << endl;
cout << endl;
}
int main(int argc, char **argv) {
if (argc == 1 || (argc == 2 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0))) {
help(argv[0]);
return 0;
}
// serverIP地址
char *serverip = argv[1];
// server端口号
int port = atoi(argv[2]);
bool flag = false;
// 新建一个client指针
Client *client = NULL;
cout << endl;
for (int i = 3; i < argc; i++) {
// 新建一个Client对象
client = new Client(serverip, port);
// 初始化计时器,每隔两百毫秒就触发一次进度显示函数
Timer timer(200);
// 开始计时器
timer.start(client->fileSize, client->sentBytes);
// 开始文件传输
flag = client->work(argv[i]);
// 结束计时器
timer.stop();
// 如果文件传输成功,打印对应信息
if (flag) {
cout << left << setw(10) << "Successd: " << left << setw(20) << client->name;
cout << " Size: " + std::to_string(client->fileSize / 1024 / 1024) + "MB " << endl;
}
// 如果文件传输失败,打印对应信息
else {
cout << left << setw(10) << "Failed:" << client->name << endl;
}
// 删除client对象
delete client;
client = NULL;
}
cout << endl;
return 0;
}
楼主是说下面这一行吗
这个argc是命令行运行时的参数个数,argv是具体的每个参数。其中,argv[0]就是可执行程序的名称,后续依次跟着此可执行程序的参数。
argc == 1: 说明可执行程序没有任何参数
(strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0)): 说明可执行程序有一个参数,参数为--help或-h,如可执行程序为A,即命令为A --help或 A -h。
如果满足上述2个条件,那就调用help()函数,参数未可执行程序的名称,也就是打印出帮助信息,如可执行程序为A,则打印:
A [IP Address] [Port] [FilePath_1] [FilePath_2] ...
也就是提示用户执行A的时候,后面需要跟着几个参数,如IP地址、端口、文件目录等。
if (argc == 1 || (argc == 2 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0))) {
help(argv[0]);
return 0;
}
程序.exe 参数1 参数2
运行程序后面带参数,实现不同分支判断