资源简介
这是一个简易的FTP系统,目前实现的功能有:
1、查看工作目录
2、更换工作目录
3、多线程下载文件
4、上传文件
5、简易的断点续传
6、简易的用户权限管理
7、支持多客户端同时访问服务器
代码片段和文件信息
#include “client.h“
int sock_fd;
int read_reply()
{
int ret_code = 0;
if (recv(sock_fd &ret_code sizeof(ret_code) 0) < 0)
{
perror(“client: error reading message from server\n“);
return -1;
}
return ntohl(ret_code);
}
void print_reply(int rc)
{
switch (rc)
{
case 220:
printf(“Welcome.\n“);
break;
case 221:
printf(“Thanks you!\n“);
break;
case 226:
printf(“Requested file action successful.\n“);
break;
case 550:
printf(“File unavailable.\n“);
break;
}
}
int client_read_command(char *buf int size char *arg char *code)
{
bzero(arg sizeof(arg));
bzero(code sizeof(code));
printf(“client> “);
fflush(stdout);
read_input(buf size);
char *temp_arg = NULL;
temp_arg = strtok(buf “ “);
temp_arg = strtok(NULL “ “);
if(temp_arg != NULL)
{
strncpy(arg temp_arg strlen(temp_arg) + 1);
}
if(strcmp(buf “list“) == 0)
{
strcpy(code “LIST“);
}
else if(strcmp(buf “get“) == 0)
{
strcpy(code “RETR“);
}
else if(strcmp(buf “quit“) == 0)
{
strcpy(code “QUIT“);
}
else if(strcmp(buf “put“) == 0)
{
strcpy(code “STOR“);
}
else if(strcmp(buf “cd“) == 0)
{
strcpy(code “CWD“);
}
else if(strcmp(buf “rest“) == 0)
{
strcpy(code “REST“);
}
else
return -1;
bzero(buf sizeof(buf));
strcpy(buf code);
if(temp_arg != NULL)
{
strcat(buf “ “);
strncat(buf arg strlen(arg) + 1);
}
return 0;
}
int client_get(int work_fd char *arg)
{
char data[MAX_SIZE];
int recv_sizefile_size;
printf(“filename:%s\n“ arg);
int fd = open(arg O_RDWR|O_CREAT);
int ret = recv(work_fd&file_sizesizeof(file_size)0);
if(recv_size < 0)
{
perror(“recv file_size error\n“);
}
file_size -= lseekSize;
ret = send(work_fd&lseekSizesizeof(lseekSize)0);
if(ret < 0)
{
perror(“send lseekSize error\n“);
}
int currentSize = MAX_SIZE;
int thread_numbers = file_size/MAX_SIZE + 1;
printf(“%d\n“ file_size);
struct thread_block *blocks = (struct thread_block *)malloc(sizeof(struct thread_block) * thread_numbers);
int i;
for(i = 0; i < thread_numbers; i++){
blocks[i].number = i;
blocks[i].fd = fd;
blocks[i].work_fd = work_fd;
blocks[i].start =i * currentSize;
blocks[i].end = blocks[i].start + currentSize;
}
blocks[thread_numbers-1].end = file_size;
pthread_t ptid[thread_numbers];
//创建线程
for(int i = 0;i < thread_numbers;i++){
pthread_create(&ptid[i]NULLthreadfunction&blocks[i]);
}
//线程join
for(i = 0;i < thread_numbers;i++){
pthread_join(ptid[i]NULL);
}
free(blocks);
close(fd);
lseekSize = 0;//偏移量置零
return 0;
}
void *threadfunction(void *argv){
struct thread_block *block = (struct thread_block *)argv;
char buf[MAX_SIZE];
int ret;
printf(“In thread %dstart = %d end = %d \n“block->numberblock->startblock->end);
//发送偏移量
ret = send(block->work_fd &block->end sizeof(block->end) 0);
if(ret < 0)
{
perror(“send lseek_size error“);
exit(1);
}
int rec
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11 2018-06-30 09:55 FTP\client\1.txt
文件 50632 2018-06-29 15:55 FTP\client\client
文件 9378 2018-06-30 07:59 FTP\client\client.c
文件 1047 2018-06-29 19:26 FTP\client\client.h
文件 61536 2018-06-29 15:55 FTP\client\client.o
文件 250 2018-06-28 20:44 FTP\client\makefile
文件 12288 2018-06-30 10:08 FTP\client\server.c
文件 5984 2018-06-28 09:34 FTP\common\-lpthread
文件 2390 2018-06-30 07:51 FTP\common\common.c
文件 894 2018-06-28 09:24 FTP\common\common.h
文件 5984 2018-06-28 09:26 FTP\common\common.o
文件 855 2018-07-01 13:00 FTP\README.md
文件 103056 2018-06-28 09:29 FTP\server\-pthread
文件 46 2018-06-29 22:50 FTP\server\.passwd
文件 31 2018-06-30 00:20 FTP\server\.userpermission
文件 11 2018-06-29 15:12 FTP\server\1.txt
文件 45 2018-06-09 15:50 FTP\server\code.tar.gz
文件 250 2018-06-28 15:35 FTP\server\makefile
文件 84840 2018-06-30 00:12 FTP\server\server
文件 11502 2018-06-30 00:12 FTP\server\server.c
文件 1439 2018-06-29 23:54 FTP\server\server.h
文件 105800 2018-06-30 00:12 FTP\server\server.o
目录 0 2018-07-01 13:00 FTP\client
目录 0 2018-06-30 11:14 FTP\common
目录 0 2018-06-30 11:14 FTP\server
目录 0 2018-06-30 11:14 FTP
----------- --------- ---------- ----- ----
458269 26
相关资源
- cas client cas server
- EVE-NG-Win-Client-Pack.exe
- modbus_client
- 统一管理系统
- 傅里叶变换轮廓术,用于光栅三维成
- 木马冰河Client端和server端
- bat自动拉取服务器上的文件
- tftp-server-0.49-6.fc14.i686.rpm
- client.ini
- 自己弄的一个Delphi UDP server 和 client的
- wcftestClient.exe
- 点对点的FTP文件传输
- FTP客户端程序
- Qt5---编译的FTP库
- fdfs_client-py-master
- WinTECH -WTclient.dll (时间限制为99年)
- fastdfs_client.zip
- zw_lgf1818-9818280-nccsimple.zip
- Prosys opcua Client
- FastDFS的Go客户端fdfs_client.zip
- 树莓派控制RGB LED源代码softPwm
- Modbus通讯TCP/IP实施指南
- 美国_环境保护署(EPA)_测试工况数据
- TTL线TFTP刷机教程、修改MAC和编程器固
- 封装的非常完善的socket类,支持服务
- DNS FTP WEB WINS DHCP服务器的配置与管理
- spring-boot-websocket-client代码
- socket通信 server对client client对client
- OPCClient,读取opc服务器的数据
- FTP服务器与客户端设计与实现
评论
共有 条评论