Saj*_*ani 4 c sockets ip network-programming
在以下代码中,我想在接受传入连接后提取已连接客户端的IP地址.accept()实现它后我该怎么办?
int sockfd, newsockfd, portno, clilen;
portno = 8090;
clilen = 0;
pthread_t serverIn;
struct sockaddr_in serv_addr, cli_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
}
bzero((char *) & serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) < 0)
{
perror("ERROR on binding");
}
listen(sockfd, 5);
clilen = sizeof (cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) & cli_addr, &clilen);
Run Code Online (Sandbox Code Playgroud)
Nik*_*sov 11
成功返回cli_addr后accept(),您已经包含已连接客户端的IP地址和端口,格式与serv_addr变量相同.使用inet_ntop到IP转换为字符串.