帮我写一个在qt上运行的能够实现文件传输的TCP服务端,实现多客户端之间的文件传输
时间: 2024-02-19 21:58:06 浏览: 23
好的,以下是一个在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端口,当有客户端连接进来时,会将其加入客户端列表中。当某个客户端发送一个文件时,服务端会将该文件保存到磁盘上,并将该文件发送给所有已连接的客户端。你可以根据实际需求修改代码来实现更复杂的功能。