在網絡編程中,獲取連接對端的 IP 地址是常見需求。通過 accept() 函數返回的客戶端地址結構體,我們可以輕鬆提取對方的 IP 信息。
struct sockaddr_in 變量用於存儲客戶端地址accept() 時傳遞該結構體指針及長度inet_ntoa() 將二進制 IP 轉換為點分十進制字符串struct sockaddr_in clientaddr;
socklen_t addrlen = sizeof(clientaddr);
int clientfd = accept(serverfd, (struct sockaddr*)&clientaddr, &addrlen);
if (clientfd > 0) {
char *client_ip = inet_ntoa(clientaddr.sin_addr);
printf("客戶端 IP: %s\n", client_ip);
}
inet_ntoa() 返回靜態緩衝區,多線程環境下建議使用 inet_ntop()struct sockaddr_in6 和 inet_ntop()accept() 返回值,失敗時返回 -1掌握這個技巧,能幫助你實現基於 IP 的訪問控制、日誌記錄等網絡應用功能。