标签:
struct hostent {
char *h_name; 官方主机名
char **h_aliases; 别名字符串的指针数组
int h_addrtype; IP地址类型
int h_length; IP地址长度
char **h_addr_list; IP地址字符串的指针数组
};
有一个hostent.c的例子,然后我想写一个gethostbyaddr的例子,但是遇到了问题,
描述一下:
#include <stdio.h> #include <unistd.h> #include <netdb.h> #include <arpa/inet.h>
int main(int argc, char *argv[])
{
char *ptr, **pptr;
char str[INET_ADDRSTRLEN];
struct hostent *hptr;
struct sockaddr_in addr;
while (-- argc > 0) {
ptr = * ++argv;
inet_pton(AF_INET, ptr, &addr.sin_addr);
if ((hptr = gethostbyaddr(&addr.sin_addr, sizeof(addr.sin_addr), AF_INET)) == NULL) {
/* 在这里总是查不到?为什么呢? 书中说是in_addr结构的指针,传参应该没错的*/
printf("gethostbyaddr() error: %s:%s\n", ptr, hstrerror(h_errno));
continue;
}
printf("official hostname: %s\n", hptr->h_name);
for (pptr = hptr->h_aliases; *pptr != NULL; pptr ++)
printf("\talias: %s\n", *pptr);
switch (hptr->h_addrtype) {
case AF_INET:
pptr = hptr->h_addr_list;
for (; *pptr != NULL; pptr ++)
printf("\taddress: %s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
break;
default:
printf("unknown address type\n");
break;
}
}
return 0; }
为什么每次都是:
gethostbyaddr() error: 119.75.217.109:Unknown host
这个问题我先放下了,继续看后面的:
struct servent {
char *s_name; // 官方服务名称
char **s_aliases; // 别名
int s_port; // 端口号,还是网络字节序的,这个是这个结构里最重要的东西了
char *s_proto; // 服务使用的协议
};
struct servent *getservbyport(int port, const char *protoname);
这个函数中port依然要求是网络字节序的,填写时需要使用htons()来转换。
接下来又有一个例子,是传入主机名和服务名来显示时间的,这个我用www.baidu.com还有www.google.com都是不行,
他们都是不开启这个功能的,我用的是RedHat6.3server系统,所以在root权限下,使用ntsys命令,可以打开开启
各种服务的选项,把daytime-dgram和daytime-stream启用就可以了,直接试自己的IP地址来测试就行了。
标签:
原文地址:http://my.oschina.net/bxxfighting/blog/373641