C++中使用TCP传文件
在两个文件中都定义文件头和用到的宏:
#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传文件的更多相关文章
- Android应用开发中webview上传文件的几种思路
1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...
- Juploader 1.0 谷歌(chrome)浏览器中成功上传文件后返回信息异常
在项目中使用了Juploader 1.0无刷新上传文件的js组件,在IE8以上没有问题,代码如下: function InitialUploadDirectly(OnUploadFunc, butto ...
- 定制FileField中的上传文件名称
FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法. 当upload_to的值设为一个方法时,就可以对上传文件的名 ...
- ASP.Net在web.config中设置上传文件的大小方法
修改Webcong文件:<system.web><httpRuntime maxRequestLength="40960" //即40MB,1KB=1024u ...
- 106.TCP传文件
客户端 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include < ...
- SpringMvc (注解)中的上传文件
第一步:导入commons-fileupload-1.3.1.jar 和commons-io-2.2.jar 架包 第二步:在applicationContext.xml中 配置 <bean i ...
- 在asp.net 中怎样上传文件夹
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- openstack 制作镜像以及windows向Linux中通过xshell传文件
慢慢的也要把openstack一些相关的笔记整理上来了 之前由于主要是在看horizon 实验室搭建的openstack平台并没有怎么实际的用起来,前几天别的同学要用来测试大数据的相关服务,才把这些内 ...
- 利用Xshell5从本机上向Linux(虚拟机中)上传文件
Xmanager Enterprise 5云盘分享: http://pan.baidu.com/s/1jIkiQNW 1. 用ifconfig命令查看Linux的IP地址 2. 由于没有IP,所以我 ...
随机推荐
- C++复制构造函数的实现
复制构造函数是一种特殊的构造函数,有一般构造函数的特性.它的功能是用一个已知的对象来初始化一个被创建的同类对象.复制构造函数的参数传递方式必须按引用来进行传递,请看实例: #include <i ...
- Ubuntu 16.04 为 PHP7 添加 memcached 以及 redis 扩展
切换到 PHP 7 之后,网站的速度大幅提升,不过通常的扩展可能某一个就还没有支持 PHP7 Memcached 比如说我现在使用了最新的 Ubuntu 16.04,虽然内置了 PHP 7 源,但 m ...
- rem第一天
Rem为单位 CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem.在W3C官网上是这样描述rem的——“font size of the root element” .下面我们就一起来 ...
- Ubuntu下安装为知笔记
之前在Windows下用的是有道云笔记,但是后来开始习惯使用Linux开发,有道云官方并没有提供Ubuntu的版本,所以权衡之下,选择了为知笔记,安装步骤: sudo add-apt-reposito ...
- NGINX 配置文件配置url重写
1.项目在根目录: location / { index index.html index.htm index.php l.php; autoindex ...
- Oracle 实用技巧
一.rlwrap 在 linux中使用sqlplus对数据库进行操作,常常由于敲错命令或需要反复执行某条语句,需要像linux本身有的历史回调的功能, rlwrap 可以用来支持oracle下sqlp ...
- c#学习笔记 VS编辑器常用设置
1.NET Framework 4.0安装好后目录在哪里? C:\Windows\Microsoft.NET\Framework下面 C#中CLR和IL分别是什么含义? CLR common lang ...
- Maven依赖调解
引用来自maven实战中的一段话.
- CENTOS7安装DOCKER步骤以及安装阿里镜像加速后无法正常启动服务的问题2018年1月
本文时间2017年12月7日,比较新,大家可以直接参考.有问题直接评论 我根据菜鸟教程通过yum install docker安装了docker,由于测试发现奇慢无比,所以就安装了阿里云的加速,随后也 ...
- 记一次RESTful调试过程
1. 为什么前台怎么调用后台,都是跳到页面不存在. 因为已经改为RESTful,保存按钮的type还是submit: 2. 改成buttong之后,设置onclick="update()“, ...