QT项目-P2P文件传输项目演示(只开了一个客户端为了方便演示,实际是可以在不同的客户端之前传输文件的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是一个Qt上运行的能够实现文件传输的TCP服务端,可以实现客户端之间的文件传输的基本代码: ``` #include <QtNetwork> #include <QObject> #include <QTcpServer> #include <QTcpSocket> #include <QFile> class Server : public QObject { Q_OBJECT public: explicit Server(QObject *parent = nullptr); void start(); private slots: void onNewConnection(); void onReadyRead(); void onDisconnected(); private: QTcpServer *m_tcpServer; QList<QTcpSocket*> m_clients; }; Server::Server(QObject *parent) : QObject(parent) { m_tcpServer = new QTcpServer(this); connect(m_tcpServer, &QTcpServer::newConnection, this, &Server::onNewConnection); } void Server::start() { if (!m_tcpServer->listen(QHostAddress::Any, 5555)) { qDebug() << "Error: Could not start server."; return; } qDebug() << "Server started."; } void Server::onNewConnection() { QTcpSocket *client = m_tcpServer->nextPendingConnection(); m_clients.append(client); connect(client, &QTcpSocket::readyRead, this, &Server::onReadyRead); connect(client, &QTcpSocket::disconnected, this, &Server::onDisconnected); qDebug() << "New client connected."; } void Server::onReadyRead() { QTcpSocket *client = qobject_cast<QTcpSocket*>(sender()); QByteArray data = client->readAll(); qDebug() << "Received: " << data; // Write file to disk QFile file("received_file.txt"); if (file.open(QIODevice::WriteOnly)) { file.write(data); file.close(); qDebug() << "File saved to disk."; } // Send file to all clients for (QTcpSocket *client : m_clients) { client->write("File received."); client->write(data); } } void Server::onDisconnected() { QTcpSocket *client = qobject_cast<QTcpSocket*>(sender()); m_clients.removeOne(client); qDebug() << "Client disconnected."; client->deleteLater(); } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); Server server; server.start(); return app.exec(); } #include "main.moc" ``` 这个服务端程序监听5555端口,当有客户端连接进来时,会将其加入客户端列表中。当某个客户端发送一个文件时,服务端会将该文件保存到磁盘上,并将该文件发送给所有已连接的客户端。你可以根据实际需求修改代码来实现更复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值