基于tcp 多客户端网络传输的架构,实现本地图片的传输和保存的代码
时间: 2024-03-17 13:44:53 浏览: 14
以下是一个基于TCP多客户端网络传输的架构,实现本地图片的传输和保存的代码示例:
服务器端代码:
```c++
#include <QtNetwork>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTcpServer server;
if (!server.listen(QHostAddress::Any, 12345)) { // 在本地监听端口 12345
qDebug() << "服务器启动失败";
return -1;
}
qDebug() << "服务器启动成功";
QObject::connect(&server, &QTcpServer::newConnection, [&](){
QTcpSocket *client = server.nextPendingConnection();
qDebug() << "新客户端连接:" << client->peerAddress().toString();
QObject::connect(client, &QTcpSocket::readyRead, [=](){
QByteArray data = client->readAll(); // 读取客户端发送的数据
QString fileName = "receivedImage.png"; // 保存的文件名
QFile file(fileName);
if (file.open(QIODevice::WriteOnly)) { // 打开文件进行写入
file.write(data);
file.close();
qDebug() << "文件保存成功:" << fileName;
} else {
qDebug() << "文件保存失败:" << fileName;
}
});
QObject::connect(client, &QTcpSocket::disconnected, [=](){
qDebug() << "客户端断开连接:" << client->peerAddress().toString();
});
});
return a.exec();
}
```
客户端代码:
```c++
#include <QtNetwork>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTcpSocket socket;
socket.connectToHost("127.0.0.1", 12345); // 连接服务器
if (!socket.waitForConnected()) {
qDebug() << "无法连接到服务器";
return -1;
}
qDebug() << "已连接到服务器";
QString fileName = "localImage.png"; // 待发送的文件名
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << "文件打开失败:" << fileName;
return -1;
}
QByteArray data = file.readAll();
socket.write(data); // 发送文件
qDebug() << "文件发送成功:" << fileName;
return a.exec();
}
```
在实际应用中,还需要考虑文件传输过程中的数据安全性和网络连接的稳定性等问题。