我正在设计一对使用基本流套接字在两个程序之间进行通信的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”......不知道那里发生了什么。命令行发生了什么?我只是使用了错误的论点?
答案 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