C:编写RPC低级应用程序:从客户端获取IP地址

时间:2012-05-05 10:47:56

标签: c client-server rpc

我已将服务器 - 客户端应用程序编程为RPC(低级别)。

这是我验证IP地址的服务器功能(这里只是必要的信息):

 int *checkip_1_svc(ip_adress *argp, struct svc_req *rqstp)
 {
     static int  result;
     struct sockaddr_in test_ip;

     result =1;

     return(&result);
 }

现在我想从连接的客户端打印IP地址。

我试过了:

printf("Clientadress:%s", rqstp->rq_xprt->xp_raddr.sin_addr.s_addr);

这不起作用。我遇到了分段错误。

2 个答案:

答案 0 :(得分:3)

s_addr最可能是无符号32位整数,因此您可以使用%u%s

printf("client address: %u", rqstp->rq_xprt->xp_raddr.sin_addr.s_addr);

要使用a.b.c.d表示法打印,可以使用:

#define SPLIT_S_ADDR_INTO_BYTES( \
    s_addr) \
    ((s_addr) >> 24) & 0xFF, \
    ((s_addr) >> 16) & 0xFF, \
    ((s_addr) >>  8) & 0xFF, \
    ((s_addr)      ) & 0xFF

...

printf(
  "client address: %hu.%hu.%hu.%hu", 
  SPLIT_S_ADDR_INTO_BYTES(ntohl(rqstp->rq_xprt->xp_raddr.sin_addr.s_addr)));

...

有关ntohl()的详细信息,请参阅man ntohl()

答案 1 :(得分:2)

这很简单:

printf("Clientadress:%s", inet_ntoa(rqstp->rq_xprt->xp_raddr.sin_addr.s_addr));