LINUX C 监听SOCKET TCP
时间: 2023-06-17 14:06:11 浏览: 53
要在 Linux C 中监听一个 TCP Socket,需要使用以下步骤:
1. 创建一个 Socket,使用 `socket()` 函数。
2. 将 Socket 绑定到 IP 地址和端口,使用 `bind()` 函数。
3. 开始监听 Socket,使用 `listen()` 函数。
4. 接受客户端连接请求,使用 `accept()` 函数。
以下是一个简单的示例代码,可以监听一个 TCP Socket:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define PORT 8080
int main() {
int sockfd, newsockfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t clilen = sizeof(cliaddr);
// 创建 Socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 绑定 Socket
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 开始监听 Socket
if (listen(sockfd, 5) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 接受客户端连接请求
newsockfd = accept(sockfd, (struct sockaddr *)&cliaddr, &clilen);
if (newsockfd < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// TODO: 处理客户端请求
// 关闭 Socket
close(sockfd);
return 0;
}
```
在这个示例中,我们使用 `socket()` 函数创建了一个 AF_INET(IPv4)类型的 Socket,使用 `bind()` 函数将 Socket 绑定到 INADDR_ANY(任何可用的本地 IP 地址)和指定的端口号,使用 `listen()` 函数开始监听 Socket。最后,我们使用 `accept()` 函数接受客户端连接请求,并返回一个新的 Socket,用于与客户端进行通信。在实际应用中,需要在 TODO 的位置处理客户端请求,并使用 `close()` 函数关闭 Socket。