Question
C语言实现TCP客户端
Answer
下面是一个简单的 C 语言实现的 TCP 客户端示例。这个客户端将连接到指定的服务器地址和端口,并发送一条消息,然后接收服务器返回的消息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1" // 服务器 IP 地址
#define SERVER_PORT 8080 // 服务器端口
#define BUF_SIZE 1024 // 缓冲区大小
int main() {
int sock;
struct sockaddr_in server_addr;
char send_buf[BUF_SIZE];
char recv_buf[BUF_SIZE];
// 创建 socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 设置服务器地址结构体
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
// 将 IP 地址转换为二进制格式
if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
perror("Invalid address/ Address not supported");
close(sock);
exit(EXIT_FAILURE);
}
// 连接到服务器
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Connection failed");
close(sock);
exit(EXIT_FAILURE);
}
// 发送消息
printf("请输入要发送的消息: ");
fgets(send_buf, BUF_SIZE, stdin);
send(sock, send_buf, strlen(send_buf), 0);
// 接收回复
int bytes_received = recv(sock, recv_buf, BUF_SIZE - 1, 0);
if (bytes_received < 0) {
perror("Receive failed");
} else {
recv_buf[bytes_received] = '\0'; // 添加字符串结束符
printf("收到服务器回复: %s\n", recv_buf);
}
// 关闭 socket
close(sock);
return 0;
}
如何编译和运行
- 将上述代码保存为
tcp_client.c
。 - 在终端中使用以下命令编译代码:
gcc tcp_client.c -o tcp_client
- 运行客户端程序:
./tcp_client
请确保在运行客户端之前,服务器端已经运行并监听指定的 IP 地址和端口。这只是一个简单的示例,你可以根据需求进行扩展和修改。