我正在尝试将连接到我的服务器的任何客户端的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));
当我运行上一个代码时,我得到Segmentation fault(core dumped)。
我也用以下内容替换了最后一行,但我得到了同样的错误:
inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN);
那么问题是什么?
答案 0 :(得分:3)
您尚未为client_addr
分配内存。
它可能只是
struct sockaddr_in client_addr
而不是
struct sockaddr_in *client_addr = NULL;
答案 1 :(得分:2)
看起来你必须为client_addr(使用malloc)
分配空间答案中有一些代码: How to map sockaddr_in C Structure to Java using SWIG