C语言accept函数如何使用
accept函数是一个套接字函数,用于接受客户真个连接要求。它的使用方式以下:
```c
#include
#include
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
```
参数说明:
- sockfd:服务端套接字描写符,即被监听的套接字;
- addr:指向一个sockaddr结构体的指针,用于存储客户真个地址信息;
- addrlen:指向socklen_t类型的指针,用于存储addr的长度;
返回值:
- 若成功,则返回一个新的套接字描写符,该套接字与客户端建立连接;
- 若出错,则返回⑴,并设置errno。
使用accept函数的一般步骤以下:
1. 创建一个套接字:使用socket函数;
2. 绑定地址:使用bind函数;
3. 监听连接要求:使用listen函数;
4. 接受连接要求:使用accept函数;
5. 使用接遭到的套接字进行通讯;
6. 关闭套接字:使用close函数。
以下是一个简单的示例代码:
```c
#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
", buffer);
// 关闭套接字
close(newsockfd);
close(sockfd);
return 0;
}
```
以上示例中,服务器创建了一个套接字,并绑定了地址。然后通过调用accept函数接受连接要求,并使用接遭到的套接字进行通讯。最后关闭了套接字。
TOP