资源简介
网上很多有关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
相关资源
- C语言socket编程实现网络数据传输
- 生产者消费者问题C/C++源程序
- c/c++ 最速下降法计算最优值 利用ar
- 校园失物招领管理系统.rar
- MFC实现局域网内点对点的大文件传输
- websocket_server_client
- C语言socket/smtp发送邮件,支持附件,
- Windows下纯C语言Socket、smtp发送邮件,
- 酒店管理系统源码完整版C++
- C Socket通信多线程数据双向收发VS201
- 利用RawSocket实现简单的Ping程序 ICMP协
- 简易的VC++点对点文件传输
- Matlab笔记——使用GPU运算、调用C/C+
- C++ UDP SOCKET 简单网络通讯
- Socket异步通信 MFC
- 离散弗雷歇Frechet距离 C/C++
- c/c++ 字符集 gbk/utf8互转,Ansi/Utf8互转
- 基于TCP的聊天室c++、MFC
- C++局域网文件传输
- 用Socket 实现http协议
- 文件传输,用MFC实现
- 宇视科技2017C/C++开发笔试题
- c++实现的双向通信的socket小程序
- c/c++中文帮助文档API
- linux环境下C语言实现图片的socket传输
- MFC开发的与服务器通讯程序
- C语言实现socket服务端和客户端
- Demo: c/c++动态库DLL调用,c#等其他语言
- MFC实现文件传输
- C利用循环左移函数流水灯
评论
共有 条评论