QT文件传输(简单版)

QT文件传输(简单版)

QT文件传输(简单版)

这是用QT写的一篇简单的文件传输,只是考虑了黏包问题,并没有考虑进度条和线程问题

一、原理图

在这里插入图片描述

二、服务器端TCPSocket通信连接

Pro中加network
头文件:
QTcpSocket通信套接字
QTcpServer监听套接字
QFile 文件操作
QTimer定时器(防止黏包)
函数

  1. FileServer()//构造函数
FileServer()
{
   
  	ui->setupUi(this);
  	sendSize = 0;
   	setWindowTitle("服务器端口:8888");
    m_tcpServer = new QTcpServer(this);
   	//隐藏按钮
    ui->buttonSelect->setEnabled(false);
   	ui->buttonSend->setEnabled(false);
    //监听
    m_tcpServer->listen(QHostAddress::Any,8888);
    connect(m_tcpServer,&QTcpServer::newConnection,
            this, &FileServer::slotNewconnection);
    //定时信号,当文件头信息发送完成时,发送文件本体
    connect(&timer, &QTimer::timeout,
            this, &FileServer::slotSend);
}

2.当有客户端连接时,打印客户端IP和端口号,及使选择文件按钮可点

void slotNewconnection();
{
   
    m_tcpsocket = m_tcpServer->nextPendingConnection();

    QString ip = m_tcpsocket->peerAddress().toString();
    quint16 port = m_tcpsocket->peerPort();

    QString str = QString("[%1 : %2]:成功连接").arg(ip).arg(port);
    ui-
  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Qt代码实现文件传输一般可以通过使用Qt提供的网络模块来实现。下面是一个简单Qt代码示例,用于将文件从客户端传输到服务端: 服务端代码: ```cpp // 引入相关头文件 #include <QTcpServer> #include <QTcpSocket> #include <QFile> // 创建服务器类 class Server : public QTcpServer { Q_OBJECT public: explicit Server(QObject *parent = nullptr) : QTcpServer(parent) {} // 重写incomingConnection函数,处理客户端连接 void incomingConnection(qintptr socketDescriptor) override { // 创建新的socket对象 QTcpSocket *socket = new QTcpSocket(this); connect(socket, &QTcpSocket::readyRead, this, &Server::readData); connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater); // 设置socket的描述符 if (!socket->setSocketDescriptor(socketDescriptor)) { socket->deleteLater(); return; } } public slots: // 接收客户端发送的数据并保存为文件 void readData() { QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if (!socket) return; // 读取客户端发送的文件数据 QByteArray data = socket->readAll(); // 保存为文件 QFile file("received_file.txt"); if (file.open(QFile::WriteOnly)) { file.write(data); file.close(); } // 发送响应给客户端 socket->write("File received successfully"); socket->flush(); } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Server server; if (server.listen(QHostAddress::Any, 1234)) { qDebug() << "Server started"; return a.exec(); } else { qDebug() << "Failed to start server"; return 1; } } ``` 客户端代码: ```cpp // 引入相关头文件 #include <QTcpSocket> #include <QFile> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建socket对象并连接到服务器 QTcpSocket socket; socket.connectToHost("127.0.0.1", 1234); // 打开要发送的文件 QFile file("file_to_send.txt"); if (!file.open(QFile::ReadOnly)) return 1; // 读取文件数据 QByteArray data = file.readAll(); file.close(); // 发送文件数据给服务器 socket.write(data); socket.waitForBytesWritten(); // 等待服务器的响应 if (socket.waitForReadyRead()) { QByteArray response = socket.readAll(); qDebug() << "Server response:" << response; } // 关闭socket连接 socket.close(); return a.exec(); } ``` 以上示例代码演示了如何使用Qt实现简单文件传输功能。注意,在实际生产环境中,还需要添加错误处理和异常处理的代码,以确保程序在异常情况下能够正常运行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值