关于gethostbyaddr
ffzgz 2007-04-04 10:44:52 我想写一个小程序用来检测局域网内主机名,稍微改了一下先在自己机子上运行看是否显示自己的主机名
struct sockaddr_in my_addr,cli_addr,br_addr;
char *part="***";
int sockfd,connfd,len,n,slen;
void *th_do(void *arg)
{
while(1)
sendto(sockfd,part,3,0,(struct sockaddr*)&br_addr,sizeof(br_addr));
}
main()
{
char readbuf[max];
struct hostent *hptr;
pthread_t tid;
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
{
fprintf(stderr,"socket err!\n");
exit(1);
}
bzero(&(my_addr),sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVER_PORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(br_addr),sizeof(br_addr));
br_addr.sin_family=AF_INET;
br_addr.sin_port=htons(SERVER_PORT);
inet_aton("10.17.5.255",&br_addr.sin_addr);
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))<0)
{
fprintf(stderr,"bind err!\n");
exit(1);
}
int bBroadcast=1000;
if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(int)))==-1)
printf("set error!\n");
pthread_create(&tid,NULL,th_do,NULL);
len=sizeof(cli_addr);
while(1)
{
if((n=recvfrom(sockfd,readbuf,max,0,(struct sockaddr*)&(cli_addr),(void *)&len))>0)
{
printf("OK!\n");
readbuf[n]='\0';
if(strcmp(readbuf,part)==0)
{
slen=sizeof(cli_addr.sin_addr);
if(!(hptr=gethostbyaddr(&(cli_addr.sin_addr),slen,AF_INET)))
printf("get error!\n");
else printf("%s\n",errno);
}
}
}
}运行老是get error,看来是gethostbyaddr返回空的问题。。。
这是怎么回事?