知识点
- 服务端与客户端的通讯
- 文件读写
- 文件窗口QFileDialog
- QString字符串的切分section
- 每次只发送4比特数据巨细
- 先发送文件信息,再传数据,防止TCP黏包 QTimer利用
总结:出了一个非常粗心的bug:在h内里声明的变量,特别是int范例的,刚开始要举行初始化,好比sendSize += len; len是整型数据,终极sendSize是即是一个非常大的数据,我的明确是一个地点,地点+整型len,lsendSize在h文件声明确,但在cpp文件没有初始化造成的。
完备项目github地点:
- https://github.com/taw19960426/Qt_study/tree/main/QTcpFile
复制代码
结果演示
流程图
tcpserverwidget.cpp
[code]#include "tcpserverwidget.h"#include "ui_tcpserverwidget.h"#include #include #include #define cout qDebug() listen(QHostAddress::Any,8888); connect(tcpServer,&QTcpServer::newConnection, [=](){ //取出创建好毗连的套接字 tcpSocket=tcpServer->nextPendingConnection(); //获取对方的IP和端口 QString ip=tcpSocket->peerAddress().toString(); qint16 port =tcpSocket->peerPort(); QString ipDate=QString("[ip=%1 port=%2] 创建好毗连了!!").arg(ip).arg(port); ui->textEdit->append(ipDate); ui->buttonFile->setEnabled(true); } ); myTimer=new QTimer(this); connect(myTimer,&QTimer::timeout, [=](){ //关闭定时器 myTimer->stop(); //发送文件 sendDate(); } );}TcpServerWidget::~TcpServerWidget(){ delete ui;}//打开文件 获取文件的根本信息void TcpServerWidget::on_buttonFile_clicked(){ QString filePath = QFileDialog::getOpenFileName( this,tr("Open File"),"../" ); //cout |