簡體   English   中英

命令行參數未傳入

[英]Command-line argument not getting passed in

我正在設計一對使用基本流套接字在兩個程序之間進行通信的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);
}

server只是來自string_server.c的可執行文件,它應該等待來自客戶端的傳入請求並從客戶端程序接收輸入(據我所知,它可以正常工作)。 我不確定gethostbyname方法,但是因為提供了代碼,我還沒有質疑它。

此外,每當我嘗試打印出argv [1]時,它就會顯示為“la”...不確定那里發生了什么。 命令行發生了什么? 我只是用錯誤的論點?

干得好:

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM