资源简介
网上很多有关socket文件传输的源码都是每次只能发送一个文件,如果想传输多个文件,不但需要多次交互,还需要把每个文件的文件名都输入进去,很不方便,所以进行了一个小扩展:即客户端可以将打算传送的多个文件都先放到一个文件夹目录下,然后通过代码实现将这一文件目录下的所有文件一次打包发送给服务端。该传输支持各类型文件,比如图片、文本等。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 6666
#define BUFFER_SIZE 1024
#define CLIENT_PATH “./client_text/“
int connect_to_Server(char* serverIP int port) {
struct sockaddr_in serverAddr;
int clientSocket;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port);
serverAddr.sin_addr.s_addr = inet_addr(serverIP);
if((clientSocket = socket(AF_INET SOCK_STREAM 0)) < 0){
printf(“sock生成出错!\n“);
return -1;
}
if(connect(clientSocket (struct sockaddr*)&serverAddr sizeof(serverAddr)) < 0) {
printf(“connect失败!\n“);
return -1;
}
return clientSocket;
}
int get_File_Num(char* pathname) {
struct dirent* ptr;
DIR* path = NULL;
path = opendir(pathname);
int cnt = 0;
while((ptr=readdir(path)) != NULL) {
if(strcmp(ptr->d_name“.“)==0||strcmp(ptr->d_name“..“)==0)
continue;
if(ptr->d_type==DT_REG)
cnt++;
}
return cnt;
}
int pack_send_File(int clientSocket FILE* fp) {
char send_buf[BUFFER_SIZE] = {0};
int len_file len_block;
int totalBlock;
fseek(fp02);//将指针放到文件末尾
len_file = ftell(fp); //统计文本的数据长度
rewind(fp); //让指针指向文件开始位置
printf(“文件的总长度len_file:%d\n“len_file);
totalBlock = len_file % BUFFER_SIZE == 0 ? len_file / BUFFER_SIZE : ((len_file / BUFFER_SIZE) + 1); //除最后一快的总块数
printf(“文件的总块数totalBlock:%d\n“totalBlock);
sprintf(send_buf “%d“ totalBlock);
send(clientSocket(char*)send_bufsizeof(send_buf)0);
for(int i = 1; i <= totalBlock; i++) {
len_block = fread(send_buf 1 BUFFER_SIZE fp);
send_buf[len_block]=‘\0‘;
char temp[100] = {0};
sprintf(temp “%d“ len_block);
printf(“文件第%d块的长度len_block:%s\n“itemp);
send(clientSocket(char*)tempsizeof(temp)0);
printf(“第%d块的内容:%s\n“isend_buf);
send(clientSocketsend_buflen_block0);
}
fclose(fp);
}
int submit_File(int clientSocket) {//提交单个文件
//将文件内容发送给服务端
FILE *fp;
char send_buf[BUFFER_SIZE] = {0};
char filename[100] = {0};
char* pre_filename = (char*)malloc(sizeof(char)*100);
while(1){
strcpy(pre_filenameCLIENT_PATH);
printf(“请输入你要提交的文件名: “);
scanf(“%[^\n]%*c“filename);
strcat(pre_filenamefilename);
fp = fopen(pre_filename “rb“);
if(fp == NULL) {
printf(“您提供的文件不存在,请重新输入!\n“);
continue;
}
break;
}
printf(“已找到您的文件:路径是%s\n“pre_filename);
pack_send_File(clientSocket fp);
printf(“文件上传成功!\n“);
close(clientSocket);
}
int submit_Files(int clientSocket) {//提交多个文件,想法是提交某个文件夹下的所有文件
FILE* fp;
char filename[100] = {0} pre_filename[100] = {0};
struct dirent* ptr;
DIR* path = NULL;
char send_buf[BUFFER_SIZE] = {0};
path = opendir((char*)CLIENT_PATH);
while((ptr=readdir(path)) != NULL) {
if(strcmp(ptr->d_name“.“)==0||strcmp(ptr->d_name“..“)==0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13568 2020-03-23 19:53 File_Trans\client
文件 4599 2020-03-23 19:47 File_Trans\client.cpp
文件 1174 2020-03-21 21:56 File_Trans\client_text\1
文件 1349 2020-03-23 09:11 File_Trans\client_text\2
文件 1970 2020-03-23 09:14 File_Trans\client_text\3
文件 2533 2020-03-22 16:27 File_Trans\client_text\client.cpp
文件 661 2020-03-21 17:39 File_Trans\client_text\text
文件 30095 2020-03-23 19:49 File_Trans\client_text\timg.jpeg
文件 51381 2020-03-23 19:50 File_Trans\client_text\timg2.jpg
文件 13544 2020-03-23 19:53 File_Trans\server
文件 3939 2020-03-23 19:47 File_Trans\server.cpp
目录 0 2020-03-23 20:04 File_Trans\client_text
目录 0 2020-03-23 18:16 File_Trans\server_text
目录 0 2020-03-23 19:26 File_Trans
----------- --------- ---------- ----- ----
124813 14
相关资源
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- 文件传输和聊天程序(c语言实现)
- 基于CS的TCP文件传输程序设计
- socket客户端.c
- socket服务端.c
- windows网络编程_文件传输
- socket tcp应用
- 北京化工大学计算方法(C/C++)讲义
- GBT 28169-2011 嵌入式软件 C语言编码规范
- XUnZip Zip解压缩.rar
- Windows_API_函数大全 C/C++
- C语言程序设计教材习题参考答案.do
- socket通讯c++源码(客户端+服务端)
- MFC的异步网络通讯应用程序
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- 高效FFT的C/C++代码实现包括基2的DIF和
- c/c++开发网络验证和本地验证
- 操作系统存储管理实验报告c/c++
- C++编写的万年历源码
- C语言进阶源码---基于graphics实现图书
- 各种关于CAsyncSocketCSocket内幕及其用法
- 井字棋三连棋的AI实现,C/C++
- 《水果忍者》设计报告.doc
- MFC实现的红绿灯程序
- Win32简易画图程序
- C++网络爬虫项目
- 泡泡堂(炸弹人)小游戏C/C++完整源码
- 使用C/C++读取BITMAP的内容
- MFC多人聊天室
评论
共有 条评论