【问题标题】:how to run c++ proram with int main(int argc, char *argv[])如何使用 int main(int argc, char *argv[]) 运行 c++ 程序
【发布时间】:2015-04-12 17:47:25
【问题描述】:

readme.txt 文件:

要使用该程序,您应该编译文件“main.cpp”,然后运行可执行文件,将端口号作为第一个参数传递给 应用程序将监听传入的数据点(用于近似原始信号的不完整数据集),(argv[1]=端口号)。

传入的数据包应遵循以下格式:

0|numSensors(int32_t)|numMeasures(int32_t)|ToM(int32_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
....
2|

“numMeasures”是为每个传感器采取的措施数(您必须为每个传感器提供至少 3 个措施 传感器,否则您无法构建训练集)。

“ToM”表示测量的类型,具体为:

0 for TEMPERATURE
1 for HUMIDITY
2 for LUMINOSITY1 

“sensorID”:是发送数据的传感器的唯一 ID

“值”:是传感器读数

“时间戳”:你猜……

这是信号重构算法返回的数据包格式:

4|next_p_tx(float)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
3|sensorId(int16_t)|value(float)|timestamp(int64_t)|
....
2|

“next_p_tx”:是传感器的传输概率,对于下一轮数据收集,有关该方法的更多信息,请参阅我们的出版物。

我的问题: 如何在 Ubuntu 上运行这个程序? (通过命令行或任何 IDE)

int main(int argc, char *argv[]) {
    initMeasures = (sensorMeasures*) malloc(sizeof(sensorMeasures));
    fprintf(stdout, "Starting...\n");

    int serversock, clientsock;
    struct sockaddr_in server, client;

    if (argc != 2) {
        fprintf(stderr, "USAGE: echoserver <port>\n");
        exit(1);
    }

    /* Create the TCP socket */
    if ((serversock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
        Die("Failed to create socket");
    }

    /* Construct the server sockaddr_in structure */
    memset(&server, 0, sizeof(server)); /* Clear struct */
    server.sin_family = AF_INET; /* Internet/IP */
    server.sin_addr.s_addr = htonl(INADDR_ANY); /* Incoming addr */
    server.sin_port = htons(atoi(argv[1])); /* server port */
    /* Bind the server socket */
    if (bind(serversock, (struct sockaddr *) &server, sizeof(server)) < 0) {
        Die("Failed to bind the server socket");
    } else {
        fprintf(stdout, "Bind successful...\n");
    }
    /* Listen on the server socket */
    if (listen(serversock, MAXPENDING) < 0) {
        Die("Failed to listen on server socket");
    } else {
        fprintf(stdout, "Listen successful...\n");
    }
    /*
     * Initialization of  "last"
     */
    for (int i = 0; i < 5; i++) {
        last[i].Phi_prec = new Matrix(1, 1);
        (*last[i].Phi_prec)(1, 1) = 0;
        last[i].x_prec = new ColumnVector(1);
        (*last[i].x_prec)(1) = 0;
        last[i].y_prec = new ColumnVector(1);
        (*last[i].y_prec)(1) = 0;
        last[i].p_tx = 1.0;
        last[i].depth = 0;
    }
    /* Run until cancelled */
    while (1) {
        unsigned int clientlen = sizeof(client);
        printf("Wait for client connection...\n");
        if ((clientsock = accept(serversock, (struct sockaddr *) &client,
                &clientlen)) < 0) {
            Die("Failed to accept client connection");
        }
        fprintf(stdout, "Client connected: %s:%d\n",
                inet_ntoa(client.sin_addr), ntohs(client.sin_port));

        now = time(NULL);
        receiveData(clientsock); // receive socket data
        reconstruct(); // reconstruct received data
        sendResults(clientsock); // return reconstructed data to web application
        printf("All operations successfully completed...\n");
    }
    free(initMeasures);
    exit(EXIT_SUCCESS);
}

【问题讨论】:

  • 它在自述文件中有说明。 “编译运行这个程序”的哪一部分你不明白?
  • 通常,stackoverflow 用户对你的所有程序都不感兴趣——只对特定问题感兴趣。对于以后的帖子,请尝试更紧凑并简化所有内容。

标签: c++ ubuntu argv argc


【解决方案1】:

要使用该程序,您应该编译文件“main.cpp”

那是g++ -Wall -Wextra -o echoserver main.cpp

然后运行可执行文件,将端口号作为第一个参数传递

那是./echoserver 12345 用你想监听的端口替换数字。

【讨论】:

  • 漂亮请启用编译器警告?否则,我们将不得不回答接下来的 50 个问题,这些问题是编译器会很乐意说明的琐碎问题。
  • @KerrekSB:好的。现在我们将收到有关警告含义的问题。
  • 没关系,如果有人询问配置警告,我会高兴一百倍 :-) 谢谢!
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2014-10-09
  • 2015-08-12
  • 1970-01-01
  • 2018-02-21
  • 2013-09-08
相关资源
最近更新 更多