#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define BUFFER_SIZE 1024int main(int argc, char *argv[]) { int client_socket; struct sockaddr_in server_addr; char buffer[BUFFER_SIZE]; char *server_ip = "127.0.0.1"; int port = 8888; if(argc > 2) { server_ip = argv[1]; port = atoi(argv[2]); } client_socket = socket(AF_INET, SOCK_STREAM, 0); if(client_socket == -1) { perror("socket"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(server_ip); server_addr.sin_port = htons(port); if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); exit(EXIT_FAILURE); } printf("Connected to server %s:%d\n", server_ip, port); while(1) { fgets(buffer, BUFFER_SIZE, stdin); buffer[strlen(buffer) - 1] = '\0'; if(strcmp(buffer, "quit") == 0) { break; } int send_len = send(client_socket, buffer, strlen(buffer), 0); if(send_len == -1) { perror("send"); break; } int recv_len = recv(client_socket, buffer, BUFFER_SIZE - 1, 0); if(recv_len == -1) { perror("recv"); break; } buffer[recv_len] = '\0'; printf("Received from server: %s\n", buffer); } close(client_socket); return 0;} 添加注释
时间: 2024-04-05 21:29:28 浏览: 119
用c语言实现的逆序文本程序
/*
* 程序名称:client.c
* 程序功能:实现TCP客户端,并与服务器进行通信
* 编译命令:gcc client.c -o client
* 运行命令:./client [server_ip] [port]
* 参数说明:server_ip-服务器IP地址,默认为127.0.0.1;port-服务器端口号,默认为8888
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[]) {
int client_socket; // 客户端套接字
struct sockaddr_in server_addr; // 服务器地址结构体
char buffer[BUFFER_SIZE]; // 缓冲区
char *server_ip = "127.0.0.1"; // 服务器IP地址,默认为127.0.0.1
int port = 8888; // 服务器端口号,默认为8888
if(argc > 2) { // 如果有参数传入
server_ip = argv[1]; // 第一个参数为服务器IP地址
port = atoi(argv[2]); // 第二个参数为服务器端口号
}
client_socket = socket(AF_INET, SOCK_STREAM, 0); // 创建客户端套接字
if(client_socket == -1) { // 如果创建失败
perror("socket"); // 输出错误信息
exit(EXIT_FAILURE); // 退出程序
}
memset(&server_addr, 0, sizeof(server_addr)); // 初始化服务器地址结构体
server_addr.sin_family = AF_INET; // 地址族为IPv4
server_addr.sin_addr.s_addr = inet_addr(server_ip); // 设置服务器IP地址
server_addr.sin_port = htons(port); // 设置服务器端口号
if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { // 连接服务器
perror("connect"); // 输出错误信息
exit(EXIT_FAILURE); // 退出程序
}
printf("Connected to server %s:%d\n", server_ip, port); // 连接成功
while(1) { // 循环读取输入
fgets(buffer, BUFFER_SIZE, stdin); // 读取输入
buffer[strlen(buffer) - 1] = '\0'; // 去除换行符
if(strcmp(buffer, "quit") == 0) { // 如果输入为quit
break; // 跳出循环
}
int send_len = send(client_socket, buffer, strlen(buffer), 0); // 发送数据
if(send_len == -1) { // 如果发送失败
perror("send"); // 输出错误信息
break; // 跳出循环
}
int recv_len = recv(client_socket, buffer, BUFFER_SIZE - 1, 0); // 接收数据
if(recv_len == -1) { // 如果接收失败
perror("recv"); // 输出错误信息
break; // 跳出循环
}
buffer[recv_len] = '\0'; // 字符串结尾添加'\0'
printf("Received from server: %s\n", buffer); // 输出接收到的数据
}
close(client_socket); // 关闭套接字
return 0; // 退出程序
}
阅读全文