0

C++ でビルドされた単純な UDP レシーバー コードを使用しています。マシンを Windows 7 にアップグレードしましたが、UDP ストリームが実行中の実行可能ファイルに到達していないため、この行が滞っています。

  iResult = recv(sock, RxBuf, buffsize, 0);

recv 関数は保留されています。Wire Shark を使用して、UDP ストリームがアクティブで正しいことを確認しましたが、何が問題なのかわかりません。

どんな助けでも大歓迎です。

(UDP ストリームがブロードキャストされます)

4

1 に答える 1

1

sock非ブロックに設定していない限り、recv()データが受信されるまでブロックされます。したがって、プログラムがそこでブロックしている場合は、おそらくデータグラムを受信して​​いないためです。

XPと7の間のWindowsネットワークでは多くの変更があったので、ここで確認することがいくつかあります。

  • bind()ステートメントを確認してください。自分が思っているポートを実際にバインドしていることと、エラーをチェックしていることを確認してください。

  • Windowsでファイアウォールをオフにするだけでは、ファイアウォールが完全に無効になるわけではありません。特にVista以降には、常にアクティブな多くのコンポーネントがあります。

  • 実行可能ファイルを最初に実行するとき、Windows Vista以降では、ネットワークアクセスが必要かどうかを確認するように求められます。[許可]以外をクリックすると、その実行可能ファイルへのパスが永久にブロックされる可能性があります。「許可」ルールを追加しても、このブロックは上書きされません。ブロックを解除するには、ファイアウォールをオンに戻し、「セキュリティが強化されたWindowsファイアウォール」を掘り下げて、着信と発信の両方から問題のあるルールを削除する必要があります。あなたはそこに何が蓄積できるかに驚くかもしれません。

  • おそらく、リッスンしているUDPポートの着信ファイアウォールルールを追加する必要があります。ファイアウォールがオフになっている場合でも。

  • その他の方法:ウイルス対策ソフトウェアを無効にし、リスナーを管理者として実行し、Wiresharkまたは別のパケットスニファを取得して、パケットが実際にマシンに到達していることを確認します。

于 2012-08-14T21:12:58.060 に答える