在Qt中,可以使用TCP或UDP协议进行跨局域网传输文件。下面是一个基本的示例代码,演示了使用TCP协议传输文件:
// 服务器端代码
QTcpServer server;
QTcpSocket* clientSocket;
void sendData()
{
QFile file("path/to/file"); // 要发送的文件路径
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "无法打开文件";
return;
}
QByteArray data = file.readAll();
qint64 fileSize = file.size();
clientSocket->write(reinterpret_cast<const char*>(&fileSize), sizeof(qint64)); // 发送文件大小
while (clientSocket->bytesToWrite() > 0)
clientSocket->waitForBytesWritten();
clientSocket->write(data); // 发送文件数据
file.close();
}
void onNewConnection()
{
clientSocket = server.nextPendingConnection();
connect(clientSocket, &QTcpSocket::disconnected, clientSocket, &QTcpSocket::deleteLater);
sendData(); // 发送文件给客户端
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
server.listen(QHostAddress::Any, 1234); // 设置服务器监听地址和端口
connect(&server, &QTcpServer::newConnection, onNewConnection);
return a.exec();
}
// 客户端代码
QString serverIP = "192.168.0.100"; // 服务器IP地址
quint16 serverPort = 1234; // 服务器端口号
QTcpSocket socket;
void receiveData()
{
qint64 fileSize;
socket.waitForReadyRead();
socket.read(reinterpret_cast<char*>(&fileSize), sizeof(qint64)); // 接收文件大小
QByteArray data = socket.readAll(); // 接收文件数据
QFile file("path/to/save/file"); // 保存文件的路径
if (!file.open(QIODevice::WriteOnly))
{
qDebug() << "无法创建文件";
return;
}
file.write(data); // 写入文件数据
file.close();
}
void connectToServer()
{
socket.connectToHost(serverIP, serverPort);
if (socket.waitForConnected())
receiveData(); // 接收来自服务器的文件
else
qDebug() << "连接失败";
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
connect(&socket, &QTcpSocket::connected, connectToServer);
return a.exec();
}
以上代码演示了在跨局域网中使用TCP协议进行文件传输。请根据实际需求修改IP地址、端口号和文件路径等相关参数。另外,为了保证稳定性和安全性,可能需要对代码进行进一步优化和改进,比如加入错误处理机制、断点续传功能等。
内容由零声教学AI助手提供,问题来源于学员提问