关于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返回空的问题。。。
这是怎么回事?
...全文
342 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffzgz 2007-04-05
  • 打赏
  • 举报
回复
怎么没人来教我啊:(
jufeng2309 2007-04-05
  • 打赏
  • 举报
回复
try it
if(!(hptr=gethostbyaddr(&(cli_addr.sin_addr),&slen,AF_INET)))
ffzgz 2007-04-04
  • 打赏
  • 举报
回复
我晕,配置一下/etc/hosts文件就行了......
但是我上网每次IP还都不一样,总不能每次都要重新配置对应IP的主机名吧。。。?
高手指点下.......

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧