我真的是C和套接字的初学者。我知道我不应该使用gethostbyaddr这是一个考试所以我必须使用他们告诉我使用的... 我正在使用Linux机器上的代码(Ubuntu 14.04)。
我正在尝试编写echo c / s程序。一切正常,但当我尝试从服务器获取有关客户端的一些信息时,struct hostent * clienthost
为空。
这是我的server.c:
int main(int argc, char * argv[])
{
struct sockaddr_in cliaddr, servaddr;
struct hostent * clienthost;
int port, sd, len;
char request[MAX_LENGTH];
const int on = 1;
port = atoi(argv[1]);
memset ((char *)&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(port);
sd=socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
bind(sd,(struct sockaddr *) &servaddr, sizeof(servaddr));
for (;;)
{
len = sizeof(request);
recvfrom(sd, request, sizeof(request), 0, (struct sockaddr *) &cliaddr, &len);
clienthost = gethostbyaddr( (char *) &cliaddr.sin_addr, sizeof(cliaddr.sin_addr), AF_INET);
if (clienthost == NULL)
printf("client host information not found\n");
else
printf("Operation from: %s %i\n", clienthost->h_name,(unsigned)ntohs(cliaddr.sin_port));
sendto(sd, &request, sizeof(request), 0, (struct sockaddr *)&cliaddr, len);
}
return 0;
}
答案 0 :(得分:0)
客户端是否有DNS条目 - 如果没有在/etc/hosts
中进行测试
- Ed Heal