博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中使用TCP传文件
阅读量:4302 次
发布时间:2019-05-27

本文共 1472 字,大约阅读时间需要 4 分钟。

在两个文件中都定义文件头和用到的宏:

#define MAX_SIZE 10#define ONE_PAGE 4096struct FileHead{    char str[260];    int size;};

在客户端发送接收阶段:

//1.发送文件头    char path[260] = {0};    cout<<"请输入文件路径"<
>path; //截取文件名 char* ptemp = path; while(*ptemp++ != '\0'); while(*(--ptemp) != '\\'); ptemp++; fstream fs; fs.open(path,fstream::in|fstream::binary); fs.seekg(0,fstream::end);//以最后的位置为基准不偏移 int nlen = fs.tellg();//取得文件大小 fs.seekg(0,fstream::beg); FileHead fh; fh.size = nlen; memcpy(fh.str,ptemp,MAX_PATH); nlen = send(sockConnect ,(char*)&fh,sizeof(fh),0); //2,.如果接受到的内容为是 char szResult[MAX_SIZE] = {0}; recv(sockConnect,szResult,sizeof(szResult),0); char szBuf[ONE_PAGE] ={0}; if(0 == strcmp(szResult,"是")) { //读文件 while(!fs.eof()) { fs.read(szBuf,ONE_PAGE); int len = fs.gcount(); //if(len == 0 ) break; send(sockConnect,szBuf,len,0); } } //3.关闭文件流 fs.close();

在服务器端,接收和发送阶段

char str[1024] = {0};    int nlen;    nlen = recv(sockWaiter,(char*)&fh,sizeof(fh),0);    cout<<"是否要接受文件"<
>str; send(sockWaiter ,str,sizeof(str),0); char szPath[MAX_SIZE] = {0}; cout<<"请输入要存储的路径"<
>szPath; char szPathName[MAX_SIZE] = {0}; sprintf(szPathName,"%s%s",szPath,fh.str);//拼接路径和文件名 cout<
<
0) { fs.write(content,len); FileSize -= len; } } fs.close();

转载地址:http://wwlws.baihongyu.com/

你可能感兴趣的文章
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
git 提示:error: unable to rewind rpc post data - try increasing http.postBuffer
查看>>