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

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

在客户端发送接收阶段:

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

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

    char str[] = {};
int nlen;
nlen = recv(sockWaiter,(char*)&fh,sizeof(fh),);
cout<<"是否要接受文件"<<endl;
cin>>str;
send(sockWaiter ,str,sizeof(str),);
char szPath[MAX_SIZE] = {};
cout<<"请输入要存储的路径"<<endl;
cin>>szPath;
char szPathName[MAX_SIZE] = {};
sprintf(szPathName,"%s%s",szPath,fh.str);//拼接路径和文件名
cout<<szPathName<<endl;
fstream fs;
fs.open(szPathName,fstream::out|fstream::binary|fstream::trunc);//以空文件的形式打开
int FileSize = fh.size;
int len;
char content[ONE_PAGE] = {};
while(FileSize)
{
len = recv(sockWaiter,content,ONE_PAGE,);
if(len > )
{
fs.write(content,len);
FileSize -= len;
}
}
fs.close();

C++中使用TCP传文件的更多相关文章

  1. Android应用开发中webview上传文件的几种思路

    1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...

  2. Juploader 1.0 谷歌(chrome)浏览器中成功上传文件后返回信息异常

    在项目中使用了Juploader 1.0无刷新上传文件的js组件,在IE8以上没有问题,代码如下: function InitialUploadDirectly(OnUploadFunc, butto ...

  3. 定制FileField中的上传文件名称

    FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法. 当upload_to的值设为一个方法时,就可以对上传文件的名 ...

  4. ASP.Net在web.config中设置上传文件的大小方法

    修改Webcong文件:<system.web><httpRuntime maxRequestLength="40960"   //即40MB,1KB=1024u ...

  5. 106.TCP传文件

    客户端 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include < ...

  6. SpringMvc (注解)中的上传文件

    第一步:导入commons-fileupload-1.3.1.jar 和commons-io-2.2.jar 架包 第二步:在applicationContext.xml中 配置 <bean i ...

  7. 在asp.net 中怎样上传文件夹

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  ...

  8. openstack 制作镜像以及windows向Linux中通过xshell传文件

    慢慢的也要把openstack一些相关的笔记整理上来了 之前由于主要是在看horizon 实验室搭建的openstack平台并没有怎么实际的用起来,前几天别的同学要用来测试大数据的相关服务,才把这些内 ...

  9. 利用Xshell5从本机上向Linux(虚拟机中)上传文件

    Xmanager Enterprise 5云盘分享:  http://pan.baidu.com/s/1jIkiQNW 1. 用ifconfig命令查看Linux的IP地址 2. 由于没有IP,所以我 ...

随机推荐

  1. New Concept English three (30)

    27W/m 32 words the death of ghost For years, villagers believed that Endley Farm was hunted. The far ...

  2. PostgreSQL修改表空间

    创建两个目录做表空间: mkdir /var/lib/pgsql/mydb_tbspace/ mkdir /var/lib/pgsql/java_tbspace/ 创建表空间: postgres=# ...

  3. iOS AnchorPoint 引起的坐标问题

    这里主要讨论设置AnchorPoint 改变时,会影响我们预期的布局问题: 一.初始代码布局     //参照页面     UIView *aView = [[UIView alloc]initWit ...

  4. ASP.NET的几个试题(《C#与.NET程序员面试宝典》)

    更多参考:博客园笔记 :ASP.NET是什么 ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET Framework中一套用于生成Web应用程序和 ...

  5. Linq:从XML获取数据

    实体类 public class Customer { public string CustomerID { get; set; } public string CompanyName { get; ...

  6. Mac各个文件夹表示的意思

    ca参考链接:http://www.jb51.net/os/MAC/130901.html

  7. vuecli3修改项目启动端口

    工作中可能存在启动多个项目的时候,默认端口号会被占,导致启动错误,这种情况下只要把要启动的项目的端口号换掉启动未用的端口就可以了,具体实现如下: vuecli3中的端口文件存放目录为:node_mod ...

  8. Collections排序

    0.前言 ThreeSet的底层实现是红黑树,它在创建set的过程中实现排序.Collections.sort是在对整个集合进行排序,按道理来说使用TreeSet插入集合元素直至建立整个TreeSet ...

  9. oscache源码浅析

    oscache作为本地缓存框架,存储模型依然是通用的缓存键值对模型.oscache使用HashTable存放数据,我们看下源码: GeneralCacheAdministrator: /** * Ge ...

  10. Python3中的http.client模块

    http 模块简介 Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块. http.client 是一个底层的 HTTP 协议客户端,被更高层的 urllib.request ...