废话不多说,如题,上代码

qt PC端
头文件
//网络部分
#include <QTcpSocket>
#include <QFile>
#include <QFileDialog>
#include <QHeaderView>
#include <QScrollBar> 具体实现 void MainForm::openFile() //打开文件
{
filename = QFileDialog::getOpenFileName(this);
if(!filename.isEmpty())
{
qDebug()<<"open file ok"<<filename; }
}
void MainForm::send()
{
tcpClient->connectToHost(ui->lineEdit->text(),8888);
} void MainForm::startTransfer()
{
localFile = new QFile(filename);
if(!localFile->open(QFile::ReadOnly))
{
QMessageBox::information(this,"警告","文件打开失败",QMessageBox::Ok);
return;
}
totalBytes = localFile->size(); QDataStream sendout(&outlock,QIODevice::WriteOnly); sendout.setVersion(QDataStream::Qt_5_3);
QString currentFileName = filename.right(filename.size()-filename.lastIndexOf("/")-1);
sendout << qint64(0) << qint64(0) <<currentFileName;
totalBytes += outlock.size();
sendout.device()->seek(0);
sendout<<totalBytes<<qint64((outlock.size() - sizeof(qint64)*2));
bytestowrite = totalBytes - tcpClient->write(outlock);
qDebug("已连接");
outlock.resize(0); } void MainForm::updaraclientprogress(qint64 numbytes)
{
bytesWrittens += (int)numbytes;
if(bytestowrite > 0)
{
outlock = localFile->read(qMin(bytestowrite,locaksize));
bytestowrite -= (int)tcpClient->write(outlock);
outlock.resize(0);
}
else {
localFile->close();
}
qDebug()<<bytestowrite<<"-------------------->>";
if(bytesWrittens == totalBytes)
{
qDebug("发送完成");
localFile->close();
tcpClient->close();
QMessageBox::information(this,"提示","同步完成",QMessageBox::Ok);
}
}
接收端

void Widget::start()
{
reciverBytes = 0;
tcpserver.listen(QHostAddress::Any,8888); //监听任意IP的8888端口
connect(&tcpserver,SIGNAL(newConnection()),this,SLOT(acceptConnection())); //当有新的连接连入客户端时,启动文件接受
}
//建立连接
void Widget::acceptConnection()
{ tcpserverconnection = tcpserver.nextPendingConnection(); //建立连接
connect(tcpserverconnection,SIGNAL(readyRead()),this,SLOT(updataServerProgress())); //发送连接信号
connect(tcpserverconnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(disPlayError(QAbstractSocket::SocketError))); //将新的连接与信息处理连接,当连接出现问题是,输出相应的错误信息
QString IPAddressString; //用于存放对方的Ip地址,
QList<QHostAddress> ipAddresslist = QNetworkInterface::allAddresses(); //获取所有的IP地址
for(int i=0;i<ipAddresslist.size();i++) //获取连入主机的IP
{
if(ipAddresslist.at(i) != QHostAddress::LocalHost && ipAddresslist.at(i).toIPv4Address()) //获得IPv4
{
IPAddressString = ipAddresslist.at(i).toString(); //获得IPv4地址
break;
}
if(ipAddresslist.isEmpty()) //如果ip地址列表为空,则表示现在没有任何用户连接到主机,显示主机自己的IP,其实,这个也是不会执行的,有连接不然会有IP,不会存在连接存在,而IP没有的时候
{
IPAddressString = QHostAddress(QHostAddress::LocalHost).toString(); //获取本机IP地址
}
}
}
void Widget::updataServerProgress() //接收文件
{
QDataStream in(tcpserverconnection);
in.setVersion(QDataStream::Qt_5_3); //使用QDataStream::Qt_5_3 协议解析数据 if(reciverBytes <= sizeof(qint64)*2) //如果文件数据小雨16字节,那么是刚开始传输数据,我们保存的我//未来的头文件信息
{
if((tcpserverconnection->bytesAvailable()>=sizeof(qint64)*2)&&(fileNameSize ==0))
{ //接收数据总大小信息和文件名大小信息
in >> totalBytes >>fileNameSize;
reciverBytes += sizeof(qint64)*2;
}
if((tcpserverconnection->bytesAvailable()>=fileNameSize)&&(fileNameSize!=0))
{ //接受文件名,并建立文件
in >> fileName;
reciverBytes += fileNameSize;
localFile = new QFile(fileName);
if(!localFile->open(QFile::WriteOnly))
{
return;
}
}
else return;
}
if(reciverBytes < totalBytes)
{ //如果接收数据小于总数据,那么将数据信息写入文件中。
reciverBytes += tcpserverconnection->bytesAvailable();
inblokc = tcpserverconnection->readAll();
localFile->write(inblokc);
inblokc.resize(0);
}
if(reciverBytes == totalBytes)
{ //接受完成时,关闭文件,变量初始化
tcpserverconnection->close();
localFile->close();
totalBytes =0;
reciverBytes =0;
fileNameSize = 0;
// opendatabase(); //如果要使用数据库作为文件的解析,可直接调用数据库文件解析函数即可
}
}

Qt PC 安卓 tcp传输文件的更多相关文章

  1. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  2. WCF使用net.tcp传输文件

    摘要:今天看了一些官方的资料和配置,简单写了一个WCF服务来传递一个文件,借此看看WCF传输大文件的能力,这里采用的是NetTcp绑定,之所以没有采用 basicHttpBinding是因为考虑这种方 ...

  3. C# TCP传输文件示例代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. qt+boost::asio+tcp文件传输

    客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...

  5. 在qt中用tcp传输xml消息

    在qt中用tcp传输xml消息 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5 3.1.2 说明: 在tcp上 ...

  6. Qt实现基于多线程的文件传输(服务端,客户端)

    1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...

  7. JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录

    JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...

  8. java实现两台电脑间TCP协议文件传输

    记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路. 注:本文参考自<黑马程序员>视频. 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书, ...

  9. Py-解决粘包现象,tcp实现并发,tcp实现传输文件的程序,校验思路,线程与进程

    黏包现象 TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方TCP接收到 ...

随机推荐

  1. 最简单的Servlet继承HttpServlet查询数据库登录验证

    <%-- Created by IntelliJ IDEA. User: yunqing Date: 2017-12-06 Time: 9:11 To change this template ...

  2. ssm分页

    pom.xml配置文件中增加相关的插件. <dependency> <groupId>com.github.pagehelper</groupId> <art ...

  3. 【转】优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  4. 使用Storyboard拖线容易出错的地方

    使用Storyboard拖线容易出错的地方: 在Storyboard中,选中某个控件,按住ctrl键进行拖线,建立Outlet和Action后,不能手动再去修改自动生成的代码,然后再次进行连线,这样会 ...

  5. ARM 汇编指令集 特点之一:指令后缀

    1.同一 指令 添加不同的后缀 就会有不同的功能! 例子: B (Byte)  功能不变,操作长度变为8位 H (Half Word) 功能不变,操作长度变为16位 S(Signed) 功能不变,操作 ...

  6. linux 安装 node 环境

    本篇学习的分享主要说在linux 安装 node 环境,个人也是在腾讯云的实验室课程学习的,这里只是个人的一个学习记录, 大家也可以去腾讯的实验室来体验一下,教程十分详细易学. 1 .安装 Node. ...

  7. 【 es搜索】

    地图搜索实现: ①参数: 左下角经纬度和右上角经纬度 图层数(zoom) 关键字等各种数据库中的字段 排序方式 具体的坐标点+距离 ②实现 a.用es作为关系库,首先先mapping所有的字段,然后用 ...

  8. WIN10远程连接winserver2012 r2,连接失败

    背景:2012开启远程的时候,默认是勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”,这个选项据说比较安全,但是用win10远程的时候就报错,函数不受支持,最后通过修改win10的配置得以 ...

  9. 关于python的菜鸟教程

    1.正则表达式 http://www.runoob.com/regexp/regexp-metachar.html 2.python正则表达死 http://www.runoob.com/python ...

  10. 嵌入式GPIO接口及操作(二)

    目标:C语言实现点亮LED灯 首先是main函数,并不特殊,它是被系统调用来执行的,main函数结束后要返回调用main函数的地址处,那么裸机程序,没有操作系统做这些工作,就要自己写调用main函数的 ...