命令行参数未传入

时间:2014-05-03 00:52:17

标签: c null command-line-arguments

我正在设计一对使用基本流套接字在两个程序之间进行通信的c程序,类似于服务器 - 客户端交互。大多数程序似乎工作正常,但系统的客户端一直报告一个我无法解决的错误。

客户端程序一旦编译,就会使用命令行参数执行,据我所知,该参数应该是服务器程序的名称。但是,每次我运行以下行

./client server

我收到的错误仅在argv [1]为空的情况下报告。这是string_client.c的代码:

if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
  perror("gethostbyname");
  printf("%s", argv[1]);
  exit(1);
}

服务器只是来自string_server.c的可执行文件,它应该等待来自客户端的传入请求并从客户端程序接收输入(据我所知,它可以正常工作)。我不确定gethostbyname方法,但是因为提供了代码,我还没有质疑它。

另外,每当我尝试打印出argv [1]时,它就会显示为“la”......不知道那里发生了什么。命令行发生了什么?我只是使用了错误的论点?

1 个答案:

答案 0 :(得分:2)

你走了:

#include <stdio.h>
#include <netdb.h>
extern int h_errno;

int main(int argc, char **argv)
{
    struct hostent *he;

    if(argc < 2)
    {
        printf("usage: %s hostname\n", argv[0]);
        return 255;
    }
    if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
      perror("gethostbyname");
      printf("%s", argv[1]);
      return 1;
    }
    printf("%s resolved to %u.%u.%u.%u\n", argv[1], 
        (unsigned char)(he->h_addr_list[0][0]),
        (unsigned char)(he->h_addr_list[0][1]),
        (unsigned char)(he->h_addr_list[0][2]),
        (unsigned char)(he->h_addr_list[0][3]));

    return 0;
}

现在有效:

$ gcc -Wall -o gethost gethost.c
$ ./gethost 
usage: ./gethost hostname
$ ./gethost google.com
google.com resolved to 173.194.40.196
$ ./gethost localhost
localhost resolved to 127.0.0.1