C语言TCP客户端循环接收数据
时间: 2024-09-29 09:08:27 浏览: 55
在C语言中,实现TCP客户端的无限循环接收数据通常涉及到`recv()`函数,该函数从套接字接收数据。以下是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080 // 确保服务端使用的端口一致
#define BUFFER_SIZE 1024
int main() {
int client_socket = socket(AF_INET, SOCK_STREAM, 0); // 创建一个新的TCP套接字
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr); // 假设服务器在同一台机器上
connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 连接到服务器
printf("Connected to the server.\n");
while (true) { // 循环接收数据
char buffer[BUFFER_SIZE];
size_t bytes_received = recv(client_socket, buffer, BUFFER_SIZE - 1, 0); // 接收数据并避免缓冲区溢出
if (bytes_received > 0) {
buffer[bytes_received] = '\0'; // 添加终止符
printf("Received data: %s\n", buffer);
} else if (bytes_received == 0) {
printf("Server closed the connection.\n");
break; // 服务器关闭连接,退出循环
} else if (errno == EAGAIN || errno == EWOULDBLOCK) {
continue; // 如果暂时无数据可用,继续尝试接收
} else {
perror("Error receiving data:");
break; // 其他错误,如网络中断,停止接收
}
}
close(client_socket); // 关闭套接字
return 0;
}
```
这个程序会不断尝试从服务器接收数据,直到服务器主动断开连接或者遇到其他网络错误。
阅读全文