qt怎么通过TCP传输文件,帮我写一写代码
时间: 2024-05-03 17:23:13 浏览: 96
以下是一个简单的示例代码,它演示了如何使用QT通过TCP传输文件:
发送端代码:
```c++
// 创建QTcpSocket对象
QTcpSocket *socket = new QTcpSocket(this);
// 连接到目标主机和端口
socket->connectToHost("127.0.0.1", 1234);
// 等待连接完成
if (socket->waitForConnected(3000)) {
// 打开本地文件
QFile file("path/to/file");
if (!file.open(QIODevice::ReadOnly)) {
// 文件打开失败
return;
}
// 发送文件名和大小
QByteArray fileName = file.fileName().toUtf8();
qint64 fileSize = file.size();
socket->write(QString("%1:%2").arg(QString::fromUtf8(fileName), QString::number(fileSize)).toUtf8());
// 发送文件内容
while (!file.atEnd()) {
QByteArray data = file.read(1024);
socket->write(data);
}
// 关闭文件和socket
file.close();
socket->disconnectFromHost();
}
```
接收端代码:
```c++
// 创建QTcpServer对象
QTcpServer *server = new QTcpServer(this);
// 监听端口
server->listen(QHostAddress::Any, 1234);
// 等待连接
if (server->waitForNewConnection(3000)) {
// 获取连接的socket
QTcpSocket *socket = server->nextPendingConnection();
// 等待读取文件名和大小
socket->waitForReadyRead(3000);
QByteArray data = socket->readAll();
QList<QByteArray> parts = data.split(':');
if (parts.size() != 2) {
// 数据格式错误
return;
}
QString fileName = QString::fromUtf8(parts.at(0));
qint64 fileSize = parts.at(1).toLongLong();
// 创建本地文件
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
// 文件打开失败
return;
}
// 读取文件内容
qint64 totalBytes = 0;
while (totalBytes < fileSize) {
socket->waitForReadyRead(3000);
QByteArray data = socket->read(qMin(socket->bytesAvailable(), (qint64)1024));
file.write(data);
totalBytes += data.size();
}
// 关闭文件和socket
file.close();
socket->disconnectFromHost();
}
```
请注意,这只是一个最简单的示例,可能需要根据实际需求进行修改和优化。例如,该示例不包含任何错误处理或进度显示。
阅读全文