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

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. POJ 3264 Balanced Lineup 【ST表 静态RMQ】

    传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total S ...

  2. Linux学习总结(十六)系统用户及用户组管理

    先来认识两个文件 /etc/passwd/etc/shadow我们打印出首尾三行,来了解下:每行由:分割为7段,每段含义为:第一段:用户名,比如root 用户,普通用户test,lv,test1第二段 ...

  3. 1spring注解:@Configuration,@Bean,@ComponentScan(),@Scope

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  4. 一段基于Redis-SortedSet的限流代码

    [HttpGet] public async Task<ActionResult<string>> Get() { //限流周期:5秒 int period = 5; //周期 ...

  5. JQuery 学习总结及实例 !! (转载)

    出自 new:http://www.jianshu.com/users/1967b163cb61/latest_articles 1.JQuery简介 普通JavaScript的缺点:每种控件的操作方 ...

  6. Redis(RedisTemplate)使用list链表

    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ...

  7. 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)

    题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...

  8. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

  9. 架构风格:你真的懂REST吗?

    本文探讨如下几个问题: 什么是REST REST包含哪些约束 什么是RESTful 纯RESTful API的难点在哪里 如果你去搜索「什么是REST」的话,大部分情况下,你看到的基本都是RESTfu ...

  10. mysql主从延迟复制

    需求描述 正常情况下我们是不会有刻意延迟从库的需求的,因为正常的线上业务自然是延迟越低越好.但是针对测试场景,业务上偶尔需要测试延迟场景下业务是否能正常运行. 解决方案 针对这种场景mysql有一个叫 ...