Как я могу изменить сервер / клиент так, чтобы он использовал номер порта и / или хост в качестве необязательного аргумента командной строки? - PullRequest
0 голосов
/ 01 мая 2019

Я хочу использовать имя хоста по умолчанию localhost и порт 8080, когда я не указываю аргументы.

server.c

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <dirent.h>
#include <sys/wait.h>
#include <assert.h>

#include "command.h"
#include "send.h"
#include "receive.h"
#define DEFAULT_PORT 8080

void checkError(int status)
{
    if (status < 0) {
        fprintf(stderr, "Process %d: socket error: [%s]\n", getpid(),strerror(errno));
        exit(-1);
    }
}

void handleNewConnection(int chatSocket);

int main(int argc,char* argv[])
{
   short int port;
   port = atoi(argv[1]); //When the argument is specified

(...)

client.c

(...)
void doLSCommand(int sid);
void doExitCommand(int sid);
void doGETCommand(int sid);
void doPUTCommand(int sid);
void doSIZECommand(int sid);
int  doMGETCommand(int sid);

int main(int argc,char* argv[])
{
    char fName[BUF_SIZE];


    char* host;
    short int port;

    host = atoi(argv[1]); //when argument specified in command line
    port = atoi(argv[2]); //when argument specified in command line

(...)

Я использовал atoi для получения аргументов, когда они предоставлены, но я не знаю, как установить значения по умолчанию, если они не предоставлены.

1 Ответ

2 голосов
/ 01 мая 2019

Для функции main есть два аргумента: argc и argv.

argc - это число переданных аргументов командной строки, а argv - массив аргументов командной строки..

См .: https://www.tutorialspoint.com/cprogramming/c_command_line_arguments.htm

В вашем случае вы можете сначала проверить argc, сколько аргументов пользователь передал вашей программе и действовать соответственно.

Итак, для хоста это может быть:

char* host;
if (argc > 1) {
  host = argv[1];
}
else {
  host = DEFAULT_HOST;
}

и для номера порта:

int port;
if (argc > 2) {
  port = atoi(argv[2]);
}
else {
  port = DEFAULT_PORT;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...