服务器拒绝了您发送离线文件

今天在用qq跟不是好友的人传送文件的时候,显示服务器拒绝了您发送离线文件。

出现这个问题,只要你随便给那个人发一条消息或者一个表情,在发送文件就可以了。

我也不知道是什么原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Qt5服务器接收和发送文件,可以使用Qt的网络模块以及文件输入输出模块。以下是一个简单的示例: 1. 接收文件 服务器端: ```cpp QTcpSocket* clientConnection; // 已连接的客户端套接字 void MyServer::readyRead() { QByteArray block = clientConnection->readAll(); // 读取客户端发送的数据 QDataStream in(&block, QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_5_9); if (block.size() == sizeof(quint64)) { // 如果是文件大小信息 in >> totalBytes; bytesReceived = 0; qDebug() << "Total bytes: " << totalBytes; // 打开一个文件,准备写入数据 localFile = new QFile(fileName); if (!localFile->open(QFile::WriteOnly)) { qDebug() << "Server: open file error!"; return; } } else if (bytesReceived < totalBytes) { // 如果是文件数据 bytesReceived += clientConnection->bytesAvailable(); inBlock = clientConnection->readAll(); localFile->write(inBlock); inBlock.resize(0); qDebug() << "Bytes received: " << bytesReceived; } } ``` 客户端: ```cpp QTcpSocket* tcpSocket; // 已连接的服务器套接字 QFile* localFile; // 要发送文件指针 QByteArray outBlock; // 存储文件数据的字节数组 qint64 fileSize; // 文件大小 void MyClient::sendFile() { tcpSocket->connectToHost(ipAddr, portNum); if (!tcpSocket->waitForConnected()) { qDebug() << "Client: connect error!"; return; } localFile = new QFile(filePath); if (!localFile->open(QFile::ReadOnly)) { qDebug() << "Client: open file error!"; return; } fileSize = localFile->size(); outBlock.resize(sizeof(qint64)); QDataStream out(&outBlock, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_9); out << fileSize; // 先发送文件大小信息 tcpSocket->write(outBlock); // 发送文件大小信息 outBlock.resize(0); while (!localFile->atEnd()) { // 发送文件数据 outBlock = localFile->read(qMin(bytesToWrite, fileSize - bytesWritten)); bytesWritten += tcpSocket->write(outBlock); outBlock.resize(0); qDebug() << "Bytes written: " << bytesWritten; } localFile->close(); tcpSocket->close(); } ``` 2. 发送文件 服务器端: ```cpp QTcpSocket* clientConnection; // 已连接的客户端套接字 QFile* localFile; // 要发送文件指针 QByteArray outBlock; // 存储文件数据的字节数组 qint64 fileSize; // 文件大小 void MyServer::sendFile() { clientConnection->connectToHost(ipAddr, portNum); if (!clientConnection->waitForConnected()) { qDebug() << "Server: connect error!"; return; } localFile = new QFile(filePath); if (!localFile->open(QFile::ReadOnly)) { qDebug() << "Server: open file error!"; return; } fileSize = localFile->size(); outBlock.resize(sizeof(qint64)); QDataStream out(&outBlock, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_9); out << fileSize; // 先发送文件大小信息 clientConnection->write(outBlock); // 发送文件大小信息 outBlock.resize(0); while (!localFile->atEnd()) { // 发送文件数据 outBlock = localFile->read(qMin(bytesToWrite, fileSize - bytesWritten)); bytesWritten += clientConnection->write(outBlock); outBlock.resize(0); qDebug() << "Bytes written: " << bytesWritten; } localFile->close(); clientConnection->close(); } ``` 客户端: ```cpp QTcpSocket* tcpSocket; // 已连接的服务器套接字 void MyClient::readyRead() { QByteArray block = tcpSocket->readAll(); // 读取服务器发送的数据 QDataStream in(&block, QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_5_9); if (block.size() == sizeof(quint64)) { // 如果是文件大小信息 in >> totalBytes; bytesReceived = 0; qDebug() << "Total bytes: " << totalBytes; // 打开一个文件,准备写入数据 localFile = new QFile(fileName); if (!localFile->open(QFile::WriteOnly)) { qDebug() << "Client: open file error!"; return; } } else if (bytesReceived < totalBytes) { // 如果是文件数据 bytesReceived += tcpSocket->bytesAvailable(); inBlock = tcpSocket->readAll(); localFile->write(inBlock); inBlock.resize(0); qDebug() << "Bytes received: " << bytesReceived; } } ``` 以上代码仅供参考,需要根据实际需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值