0

-->我正在使用QTcpSocket,QTcpServer编写程序。我是否需要添加一些代码(即确认程序)来保证数据包被传递?
如果是这种情况,我在网上找不到类似的东西,因此想看看一些例子,拜托。

--> 或者在某个地方的 QT 库中,这些已经被覆盖,所以我不需要这样的东西?

任何帮助将不胜感激。谢谢。

编辑:现在,我在问如何将标题与我在下面添加的 QDataStream 块一起使用。我希望每个块都有标题来告诉信息。这样我就可以跟踪写了哪些部分,哪些部分丢失了。请看下面。

///RECEIVER SIDE

QDataStream in(socket);
in.setVersion(QDataStream::Qt_4_0);

QByteArray next;
next=socket->readAll(); 

QFile output("c:\\some\\output.txt");
output.open(QIODevice::Append);
output.write(next);
output.close();


///SENDER SIDE
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);

QFile file(path);
if(file.exists()){
         file.open(QIODevice::ReadOnly);    
}

QByteArray data; 
data=file.readAll();
block.append(data);

out << (quint64)0;
out.device()->seek(0);
if(!socket->waitForBytesWritten()){
    qDebug()<<"writing";
 socket->write(block);
 socket->flush();
}


file.close();
qDebug()<<"data: size"<<file.size();
socket->disconnectFromHost();
4

1 回答 1

2

TCP 保证有序交付。一旦您将数据提交到 TCP 套接字,堆栈将尝试发送尽可能多的数据。Stack 使用内部确认消息来保证交付。

所以你不需要发送确认但是,为你的数据包实现一个标头是一个好主意,这样接收端可以正确地将小数据包合并回一个大文件。

于 2011-07-07T07:26:46.813 回答