2014-04-07 29 views
0

我想轉換連接到我的服務器,以文本形式如下任何客戶端的IP地址:段錯誤的IP地址轉換爲文本形式時

struct sockaddr_in *client_addr = NULL; 
    socklen_t addrlen = sizeof(struct sockaddr_in); 
    char client_ip[INET_ADDRSTRLEN]; 

    printf("Waiting for incomming connections!\n"); 
    if ((client.fd = accept(server_fd, (struct sockaddr *) client_addr, &addrlen)) < 0) 
    { 
     perror("Accept() API failed."); 
     continue; 
    } 

    // Convert Client address from binary to text. 
    strcpy(client_ip, inet_ntoa(client_addr->sin_addr)); 

當我運行上面的代碼中,我得到分段錯誤(核心轉儲)。

我也取代威特下面的最後一行,但我得到了同樣的錯誤:

inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN); 

那麼,有什麼問題嗎?

回答

3

你還沒有爲client_addr分配的內存。 這可能僅僅是

struct sockaddr_in client_addr 

,而不是

struct sockaddr_in *client_addr = NULL;