C语言实现tcp交互过程
时间: 2024-10-13 11:04:45 浏览: 27
在C语言中,使用socket API可以创建TCP套接字,并实现基本的客户端-服务器交互过程。下面是一个简化的步骤概述:
1. **创建套接字**:
- 使用`socket()`函数创建一个新的网络套接字,第一个参数通常选择`AF_INET`表示IPv4协议。
- 然后,选择数据传输类型,`SOCK_STREAM`用于TCP连接。
2. **绑定地址**:
- 对于服务器端,使用`bind()`将套接字绑定到特定的IP地址和端口号。
- 对于客户端,不需要这个步骤,因为它们会自动寻找服务器。
3. **监听(仅限服务器端)**:
- 服务器端使用`listen()`开始监听连接请求,指定最大队列长度。
4. **接受连接(仅限服务器端)**:
- 使用`accept()`等待客户端连接,返回一个新的套接字用于与新连接通信。
5. **连接(仅限客户端)**:
- 客户端使用`connect()`连接到服务器的地址和端口。
6. **发送和接收数据**:
- 使用`send()`和`recv()`函数在连接的套接字上进行双向数据交换。确保提供正确的缓冲区和长度信息。
7. **关闭连接**:
- 在完成数据传输后,使用`close()`关闭套接字,释放资源。
以下是简化版的示例代码片段:
```c
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(struct sockaddr_in);
// ...其他配置...
// 创建服务器套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket creation failed");
return -1;
}
// 绑定并监听
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("Binding failed");
close(server_fd);
return -1;
}
listen(server_fd, 3);
// 接受客户端连接
if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &addr_len)) == -1) {
perror("Accepting failed");
close(server_fd);
return -1;
}
// 发送和接收数据
char message[] = "Hello from server!";
send(client_fd, message, strlen(message), 0);
char buffer[1024];
recv(client_fd, buffer, sizeof(buffer), 0);
printf("Received: %s\n", buffer);
// 关闭套接字
close(client_fd);
close(server_fd);
}
```
请注意,实际项目中还需要处理错误、异常以及适当的线程安全措施。
阅读全文