资源简介
Qt实现的文件传输和客户端和服务器端的对话,使用TCP协议,使用多线程
代码片段和文件信息
#include “Client.h“
#include
#include
#include
#include
Client::Client(Qobject *parent)
: QTcpSocket(parent)
{
sendfile=false;
sendmsg=false;
connect(this SIGNAL(connected()) this SLOT(on_connected()));
connect(this SIGNAL(error(QAbstractSocket::SocketError))
this SLOT(displaySocketError(QAbstractSocket::SocketError)));
}
void Client::sendFile(const QString &file const QHostAddress &dest)
{
filePath = file;
sendfile=true;
connectToHost(dest 5234);
qDebug() << “Send file “ << file;
}
void Client::sendFile(const QString &file const QString &dest)
{
filePath = file;
sendfile=true;
connectToHost(dest 5234);
qDebug() << “Send file “ << file;
}
void Client::sendMsg(const QString textconst QHostAddress &dest)
{
sendmsg=true;
msg=text;
connectToHost(dest 5234);
qDebug() << “Send message “ << text;
}
void Client::sendMsg(const QString textconst QString &dest)
{
sendmsg=true;
msg=text;
connectToHost(dest 5234);
qDebug() << “Send message “ << text;
}
void Client::on_connected()
{
qDebug() << “Connected“;
if(sendfile)
{
QFile file(filePath);
if(!file.open(QIODevice::ReadOnly))
{
emit onerror(2);
disconnectFromHost();
return;
}
else
emit fileSize(file.size());
emit message(tr(“ Start send!“));
QString fileName = file.fileName();
fileName = fileName.remove(0 fileName.lastIndexOf(‘/‘)+1);
qint64 size;
QByteArray block;
QDataStream out(&block QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
out << qint16(0x0001) << fileName.toUtf8();
size = block.size();
write((char*)&size sizeof(qint64));
write(block.data() size);
//flush();
if(!waitForBytesWritten(-1))
{
qDebug() << “writen Bytes error “ << errorString();
throw 2;
}
do
{
block.clear();
out.device()->seek(0);
out << qint16(0x0002) << file.read(0xFFF0);
size = block.size();
qDebug() << “Send Data “ << size << “ byte.“;
write((char*)&size sizeof(qint64));
write(block.data() size);
if(!waitForBytesWritten(-1))
{
qDebug() << “writen Bytes error “ << errorString();
throw 2;
}
}while(!file.atEnd());
sendEOF();
qDebug() << “FileSend finished.“;
emit message(tr(“ Send finished!“));
forever/*(int i=0; i < 10; i++)*/
{
if(!waitForDisconnected())
{
//sendEOF();
}
else
{
//qDebug
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4489 2014-12-11 14:53 TCP\Client\Client.cpp
文件 826 2014-12-11 11:41 TCP\Client\Client.h
文件 428 2014-12-10 00:30 TCP\Client\Client.pro
文件 77697 2014-12-11 15:47 TCP\Client\Client.pro.user
文件 183 2014-12-09 21:49 TCP\Client\main.cpp
文件 3403 2014-12-11 14:53 TCP\Client\mainwindow.cpp
文件 723 2014-12-11 11:49 TCP\Client\mainwindow.h
文件 3970 2014-12-11 15:07 TCP\Client\mainwindow.ui
文件 206 2014-12-11 13:51 TCP\Server\main.cpp
文件 883 2014-12-11 15:29 TCP\Server\mainwindow.cpp
文件 574 2014-12-11 15:27 TCP\Server\mainwindow.h
文件 2354 2014-12-11 15:26 TCP\Server\mainwindow.ui
文件 1078 2014-12-11 15:26 TCP\Server\Server.cpp
文件 484 2014-12-11 15:26 TCP\Server\Server.h
文件 477 2014-12-11 12:07 TCP\Server\Server.pro
文件 77697 2014-12-11 15:31 TCP\Server\Server.pro.user
文件 3323 2014-12-11 15:26 TCP\Server\Thread.cpp
文件 860 2014-12-11 15:26 TCP\Server\Thread.h
目录 0 2014-12-11 16:12 TCP\Client
目录 0 2014-12-11 16:12 TCP\Server
目录 0 2014-12-11 16:12 TCP
----------- --------- ---------- ----- ----
179655 21
- 上一篇:模糊c均值法分割图像
- 下一篇:QT单击按钮关闭一个窗口,并且打开一个窗口
相关资源
- QT单击按钮关闭一个窗口,并且打开一
- QT打开摄像头 拍照 截图
- 基于Qt4RTU模式modbus使用包括slave和ma
- tcp聊天工具
- Qt个性化系统托盘的实现
- qt 内建PID模拟仿真
- Qt ActiveX 开发帮助文档
- Qt五子棋程序源码
- ros_qtc_plugin配置脚本
- Qt扫雷游戏源码
- 计算机网络+课程设计源代码和实验报
- QT5.7.0实现面积计算小demo
- 基于Qt的一笔画小软件欧拉回路算法的
- 斗地主QT4.8.6编译通过
- Qt5.10检测系统休眠
- Qt - 抽签小工具源码及可执行程序
- Qt简易画板267943
- qt记事本源代码
- 使用QT模仿TGP腾讯游戏平台
- Qt 语音合成 文字转语音
- qt5.3 实现直尺
- 基于UDP和TCP的Socket编程文件传输,D
- Cardinal样条曲线Qt代码
- qt视频播放器源代码
- linux文件传输项目源码
- led、蜂鸣器、ad的qt程序
- Qt写的贪吃蛇小游戏
- Qt通过线性插值和矢量线性插值实现图
- qt TCP多客户端通信
- 在linux中使用tcp实现一个简单文件服务
评论
共有 条评论