2014-04-18 66 views
1
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()我知道已經嘗試過很多可能性沒有什麼作用。如何初始化使用addrinfo sockaddr_in

同樣在端口上使用MSDN示例htons()但上面的工作。

有沒有更好的方法來做到這一點?

+0

什麼是錯的使用'htons' aznc'inet_addr'? –

回答

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 ..

+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轉換主機字節以網絡字節順序。

+0

是的我會用htons()謝謝 –