当前位置: 技术问答>linux和unix
书上的代码,问两个问题,问题在注释里
来源: 互联网 发布时间:2016-11-06
本文导语: /* Start with the usual includes and declarations. */ #include #include #include #include #include int main(int argc, char *argv[]) { char *host; int sockfd; int len, result; struct sockaddr_in address; struct hostent *hos...
/* Start with the usual includes and declarations. */
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
char *host;
int sockfd;
int len, result;
struct sockaddr_in address;
struct hostent *hostinfo;
struct servent *servinfo;
char buffer[128];
if(argc == 1)
host = "localhost";
else
host = argv[1];
// (1)这里的 host 如果传参进来的话,是不是只能是 /etc/hosts 里有配置的值?
/* Find the host address and report an error if none is found. */
hostinfo = gethostbyname(host);
if(!hostinfo) {
fprintf(stderr, "no host: %sn", host);
exit(1);
}
/* Check that the daytime service exists on the host. */
// (2) 这只能判断本机是否有 daytime 服务吧,不能判断 host 主机吧? 因为没有用到 host 参数
// 代码英文注释是不是有误?
servinfo = getservbyname("daytime", "udp");
if(!servinfo) {
fprintf(stderr,"no daytime servicen");
exit(1);
}
printf("daytime port is %dn", ntohs(servinfo -> s_port));
/* Create a UDP socket. */
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
/* Construct the address for use with sendto/recvfrom... */
address.sin_family = AF_INET;
address.sin_port = servinfo -> s_port;
address.sin_addr = *(struct in_addr *)*hostinfo -> h_addr_list;
len = sizeof(address);
result = sendto(sockfd, buffer, 1, 0, (struct sockaddr *)&address, len);
result = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&address, &len);
buffer[result] = '';
printf("read %d bytes: %s", result, buffer);
close(sockfd);
exit(0);
}
|
// (1)这里的 host 如果传参进来的话,是不是只能是 /etc/hosts 里有配置的值?
不是,任何域名或者主机名或者IP地址都可以。
// (2) 这只能判断本机是否有 daytime 服务吧,不能判断 host 主机吧? 因为没有用到 host 参数
这个我有同感。getservbyname这里没有用到任何主机的信息,他只是从本地的/etc/services读取包含"daytime"和"udp"的一行而已。
不是,任何域名或者主机名或者IP地址都可以。
// (2) 这只能判断本机是否有 daytime 服务吧,不能判断 host 主机吧? 因为没有用到 host 参数
这个我有同感。getservbyname这里没有用到任何主机的信息,他只是从本地的/etc/services读取包含"daytime"和"udp"的一行而已。
|
不是。
这个里的host指的是能在网络上被识别的host。
如果在局域网,可以是主机名。
当然还可以是域 例如:www.google.com.hk
这个里的host指的是能在网络上被识别的host。
如果在局域网,可以是主机名。
当然还可以是域 例如:www.google.com.hk