2015-05-04 35 views
1

当我创建我的UDP客户端我使用的客户端地址和端口这个准备:创建不使用本地环路接口的UDP客户端?

 struct sockaddr_in caddr; 

    /* prepare client address structure */ 
    caddr.sin_family  = AF_INET; 
    caddr.sin_port  = htons(0); /* ask bind for an unused port number */ 
    caddr.sin_addr.s_addr = htonl(INADDR_ANY); 

    /* bind */ 
    printf("Binding to an unused port number\n"); 
    result = bind(s, (struct sockaddr *) &caddr, sizeof(caddr)); 
     if (result == -1) 
      err_fatal("bind() failed"); 
     namelen = sizeof(caddr); 
     getsockname(s, (struct sockaddr *) &caddr, &namelen); 
     showAddr("done. Bound to addr: ", &caddr); 

这样的获取IP地址0.0.0.0和我都是用本地环路接口来联系我的服务器。

现在我想使用另一个接口并绑定到我的客户端的另一个IP地址,所以我尝试从另一个IP地址联系我的服务器,而不仅仅使用本地环路。

你能告诉我如何做到这一点?

我试图用这样的:

#define DEF "10.0.0.1" 

    caddr.sin_addr.s_addr = htonl(DEF); 

,但我得到的错误。

回答

1

如果你想要另一个IP地址,你需要先在你的系统上配置它。如果您使用Linux,请参阅“ip”手册页。 (例如ip addr add 10.0.0.1 ...)

INADDR_ANY允许您的端点接收到达您在系统上配置的任何IP地址的请求。如果您只想接收10.0.0.1上的请求,请首先在您的系统上配置该IP地址,然后使用它而不是INADDR_ANY,就像您尝试的那样。