如何使用addrinfo初始化sockaddr_in

时间:2014-04-18 01:59:44

标签: c++ sockets

void ClientCreate(struct addrinfo * addr, 
                  const char* port) {

  sockaddr_in service;

  service.sin_family = AF_INET;

  service.sin_addr.s_addr = inet_addr ;       /* What do I put here? */ 

  service.sin_port = (u_short)atoi(port); 

我不必使用inet_addr()我知道已经尝试了很多可能性无效。

同样在端口上,MSDN示例使用htons(),但上述工作原理。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

  

service.sin_addr.s_addr = inet_addr(我在这里放什么?);

应该是服务器的IP地址,

//如果服务器是localhost
service.sin_addr.s_addr = inet_addr("127.0.0.1");

  

同样在端口上,MSDN示例使用了htons()

htons将主机字节顺序转换为网络字节顺序。

答案 1 :(得分:1)

快速浏览getaddrinfo。这将填充多个addrinfo结构,并将它们返回给您。

一个简单的例子(部分来自Beej):

int sockfd;  
struct addrinfo hints, *servinfo, *p;
int rv;

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use AF_INET6 to force IPv6
hints.ai_socktype = SOCK_STREAM;

if ((rv = getaddrinfo("www.example.com", "http", &hints, &servinfo)) != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
    exit(1);
}

如果确实想手动执行此操作,请务必使用htons ..