辞树325 2022-05-11 19:43 采纳率: 85.2%
浏览 16
已结题

socket传输文件的主函数

在网上看到一段代码,关于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;
}

  • 写回答

2条回答 默认 最新

  • space01 2022-05-11 20:21
    关注

    楼主是说下面这一行吗
    这个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;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来