1

UDP ソケットを使用しています。サーバー アプリケーションは、クライアントがサーバーにデータを送信する必要がある時間に関する情報をクライアントに送信します。次に、クライアントは特定のパケットを送信することにより、この間に送信を開始します。

そのため、 Sendto()の後にデータがワイヤに送信されたかどうかを判断して、クライアントが実際に送信している時間を確認する方法が必要です。それは存在しますか?

OS: Windows7

パフォーマンス カウンター ( Network interface \ Output Queue Length ) を使用しようとしましたが、常に 0 です。

私が知っているもう 1 つの方法は、SO_SNDBUF ( setsockopt() ) を送信するパケットのサイズに設定することです。したがって、sendto()は、送信ソケット バッファがいっぱいになるまでブロックします (前のパケットはネットワーク インターフェイス バッファに送信されません)。しかし、ネットワークインターフェイスバッファではなくソケットバッファでのみ機能するため、機能しないようです。

Linux 向けのソリューションにも興味があります。

4

3 に答える 3

0

上記のマットのコメントを読んでください。通常、UDP では、send() メソッドを呼び出すとすぐにデータが送信されると想定する必要があります。データが実際に送信および/または受信されたことを確認する方法はありません。

編集:データが意図した宛先に到達したことを確認する方法がないことを意味しました。データが送信されていることを確認でき、ルート上である程度トレースすることもできます。ただし、データが受信されたことを確認する方法はありません。たとえ意図した受信者が到達可能であっても、受信者がリッスンしているとは限りません...

于 2012-05-18T09:19:21.680 に答える
0

Sendto() の後にデータがワイヤに送信されたかどうかを判断して、クライアントが実際に送信している時間を確認する方法が必要です。それは存在しますか?

sendto()パケットがクライアントに送信されたかどうかについては、おそらく必要以上の作業です。

クライアントが特定のタイムスロットでのみ送信するようにするには、サーバーのパケットに残りの送信時間を含める必要があります。クライアントは、ネットワーク経由でサーバーに到達するのにかかる時間の見積もりも保持する必要があります。これら 2 つの数値を使用して、クライアントが送信する残り時間を推定します。

于 2012-05-18T09:20:23.853 に答える