返回信息流rt,或许得C++里的函数?形式是这样的write(char *,qint64),返回值未知,我不知道这是往哪儿写啊,求大牛指点。
#include "nfclient.h"
#include <QByteArray>
#include <QDataStream>
#include <QFile>
#include <QHostAddress>
nfClient::nfClient(QObject *parent)
: QTcpSocket(parent)//QAbstractSocket(QAbstractSocket::TcpSocket, parent)
{
connect(this, SIGNAL(connected()), this, SLOT(on_connected()));
connect(this, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displaySocketError(QAbstractSocket::SocketError)));
}
void nfClient::sendFile(const QString &file, const QHostAddress &dest)
{
filePath = file;
connectToHost(dest, 5234);
qDebug() << "Send file " << file;
}
void nfClient::sendFile(const QString &file, const QString &dest)
{
filePath = file;
connectToHost(dest, 5234);
qDebug() << "Send file " << file;
}
void nfClient::on_connected()
{
qDebug() << "Connected";
QFile file(filePath);
if(!file.open(QIODevice::ReadOnly))
{
emit onError(2);
disconnectFromHost();
return;
}
else
emit fileSize(file.size());
emit message(tr(" Start send!"));
QString fileName = file.fileName();
fileName = fileName.remove(0, fileName.lastIndexOf('/')+1);
qint64 size;
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << qint16(0x0001) << fileName.toUtf8();
size = block.size();
[color=#5F9EA0]write((char*)&size, sizeof(qint64));
write(block.data(),[/color] size);
//flush();
if(!waitForBytesWritten(-1))
{
qDebug() << "writen Bytes error " << errorString();
throw 2;
}
do
{
block.clear();
out.device()->seek(0);
out << qint16(0x0002) << file.read(0xFFF0);
size = block.size();
qDebug() << "Send Data " << size << " byte.";
write((char*)&size, sizeof(qint64));
write(block.data(), size);
if(!waitForBytesWritten(-1))
{
qDebug() << "writen Bytes error " << errorString();
throw 2;
}
}while(!file.atEnd());
sendEOF();
qDebug() << "FileSend finished.";
emit message(tr(" Send finished!"));
forever/*(int i=0; i < 10; i++)*/
{
if(!waitForDisconnected())
{
//sendEOF();
}
else
{
//qDebug() << "Number is " << i << ".";
qDebug() << "GoTo return.";
return;
}
}
qDebug() << "I will disconnected.";
disconnectFromHost(); // have Error.
}
void nfClient::displaySocketError(QAbstractSocket::SocketError e)
{
qDebug() << "Error: " << e << "\n\t" << errorString();
if(e == QAbstractSocket::HostNotFoundError)
emit onError(1);
if(e == QAbstractSocket::ConnectionRefusedError)
emit onError(3);
}
void nfClient::sendEOF()
{
qint64 size;
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
QByteArray data = filePath.toUtf8();
data.resize(0x8000);
out << quint16(0x0003) << data << filePath.toUtf8();
size = block.size();
write((char*)&size, sizeof(qint64));
write(block.data(), size);
if(!waitForBytesWritten(-1))
qDebug() << "Send EOF Error: " << errorString();
else
qDebug() << "Send EOF";
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #47413同步于 2010/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Qt里的write是怎么用的?assist里面实在找不到啊,麻烦各位大牛
realerge
2010/12/6镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。