用C语言编写一个函数,客户端可以通过下载命令下载服务器上的文件,例如:download view.jpg下载的文件保存在客户端运行的当前文件中
时间: 2024-03-13 10:45:05 浏览: 17
好的,可以尝试使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
// 定义服务器地址和端口号
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888
// 定义缓冲区大小
#define BUFFER_SIZE 1024
// 下载函数
void download(int sock, char* filename) {
// 发送下载命令到服务器
char command[BUFFER_SIZE];
sprintf(command, "DOWNLOAD %s", filename);
send(sock, command, strlen(command), 0);
// 打开文件并准备写入数据
char filepath[BUFFER_SIZE];
sprintf(filepath, "./%s", filename);
FILE* file = fopen(filepath, "wb");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
// 接收数据并写入文件
char buffer[BUFFER_SIZE];
int recv_size;
while ((recv_size = recv(sock, buffer, BUFFER_SIZE, 0)) > 0) {
fwrite(buffer, sizeof(char), recv_size, file);
}
// 关闭文件
fclose(file);
}
int main() {
// 创建客户端socket
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
printf("Failed to create socket.\n");
return -1;
}
// 构造服务器地址结构体
struct sockaddr_in server_addr;
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(SERVER_PORT);
// 连接服务器
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
printf("Failed to connect to server.\n");
return -1;
}
// 下载文件
char filename[BUFFER_SIZE];
printf("Enter the filename you want to download: ");
scanf("%s", filename);
download(sock, filename);
// 关闭socket
close(sock);
return 0;
}
```
这个程序的主要逻辑是:
1. 创建客户端socket;
2. 构造服务器地址结构体;
3. 连接服务器;
4. 发送下载命令到服务器,并打开本地文件准备写入数据;
5. 不断接收服务器返回的数据,并写入本地文件;
6. 关闭socket。
你只需要将 `SERVER_IP` 和 `SERVER_PORT` 修改为你服务器的IP地址和端口号,就可以在客户端运行这个程序进行文件下载了。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)