accept函数是一个套接字函数,用于接受客户端的连接请求。它的使用方式如下:
#include#include int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数说明:
-
sockfd:服务端套接字描述符,即被监听的套接字;
-
addr:指向一个sockaddr结构体的指针,用于存储客户端的地址信息;
-
addrlen:指向socklen_t类型的指针,用于存储addr的长度;
返回值:
-
若成功,则返回一个新的套接字描述符,该套接字与客户端建立连接;
-
若出错,则返回-1,并设置errno。
使用accept函数的一般步骤如下:
-
创建一个套接字:使用socket函数;
-
绑定地址:使用bind函数;
-
监听连接请求:使用listen函数;
-
接受连接请求:使用accept函数;
-
使用接受到的套接字进行通信;
-
关闭套接字:使用close函数。
以下是一个简单的示例代码:
#include#include #include #include #include #include int main() { int sockfd, newsockfd, portno, clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("ERROR opening socket"); exit(1); } // 绑定地址 bzero((char *) &serv_addr, sizeof(serv_addr)); portno = 12345; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("ERROR on binding"); exit(1); } // 监听连接请求 listen(sockfd, 5); clilen = sizeof(cli_addr); // 接受连接请求 newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) { perror("ERROR on accept"); exit(1); } // 使用接受到的套接字进行通信 bzero(buffer, 256); n = read(newsockfd, buffer, 255); if (n < 0) { perror("ERROR reading from socket"); exit(1); } printf("Message from client: %s\n", buffer); // 关闭套接字 close(newsockfd); close(sockfd); return 0; }
以上示例中,服务器创建了一个套接字,并绑定了地址。然后通过调用accept函数接受连接请求,并使用接受到的套接字进行通信。最后关闭了套接字。