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 ソケットにデータを送信すると、スタックはできるだけ多くのデータを送信しようとします。スタックは、内部確認メッセージを使用して配信を保証します。

そのため、受信確認を送信する必要はありませんが、受信側が小さなパケットを巨大なファイルに適切にマージできるように、パケットのヘッダーを実装することをお勧めします。

于 2011-07-07T07:26:46.813 に答える