1

C++ アプリケーションで「信頼できる」UDP 受信に WinPCap ライブラリを使用したいと考えています。このライブラリを使用してキャプチャしてから処理する、私が見つけたすべての例。ストリーミング モード用に PCap を構成し、UDP のみをユーザー定義ポートで受信する方法、またはこれを解決する方法 (例) はありますか。今回は、0.5Gb/s を受信できる信頼性の高い UDP サーバーを使用しています。しかし、低速の PC では、パケットが失われます。アプリケーションではなく、Ethereal でパケットを確認できます。

ありがとう

vsm

4

2 に答える 2

0

処理できるデータグラムの数を増やすためのより標準的な方法をすべて試したことがあると思いますか?recvバッファーのサイズを大きくしたり、データグラムごとに実行する処理を高速化したり、IOCPを使用して問題に対応するスレッドを増やしたり、Windows 8をターゲットにできる場合はRIOを使用したりしますか?

もしそうなら、WinPCapを使用することはうまくいくかもしれませんが、それは少し極端な解決策のように聞こえます。

必要なのは、関心のあるデータグラムのみをキャプチャするようにフィルターを作成することです...ドキュメントには、フィルターを使用する例が含まれています。

于 2012-09-02T06:28:39.980 に答える
0

私はここからサーバーを持っています: http://www.gamedev.net/topic/533159-article-using-udp-with-iocp/。このコードは IOCP で動作します。Windows XP で問題なく動作しています。0.5Gb/sの受信で問題ありません。しかし、今ではWin7は少し信頼できません。時々パケット位置エラーがあります。(私のデバイスは udp パケットを生成し、そのペイロードには PacketNumber - パケットごとに増加する番号があります。エラーが発生したとき、すべてのパケット番号をファイルに書き込みます。たとえば、10,11,290,13,14... を確認できます)。IOCP とマルチスレッドに関して、WinXP と Win7 に既知の相違点はありますか? または、IOCP 処理を備えた無料の UDP サーバーを知っていますか?

procedding ループでは、パケットをバッファに追加し、その番号を確認するだけです。

于 2012-09-04T13:21:48.540 に答える