0

リモートホストが特定のUDPポート番号をリッスンしているかどうかを確認しようとしています。私はこれを(C#で)次のように行います:

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  int sent = socket.SendTo(bufsend, bufsend.Length, SocketFlags.None, endpoint);
  int recv = socket.ReceiveFrom(bufrecv, ref endpoint);

誰もリッスンしていない場合、ICMP「ポート到達不能」が発生します。これは、ErrorCode WSAECONNRESET(10054)を使用してソケット例外として受信時に報告されます。それはすべて理にかなっていますが、Windowsファイアウォールが無効になっている場合にのみ発生します。ファイアウォールが有効になっている場合(プログラムの例外を作成した場合でも)、おそらくファイアウォールがICMPの「ポートに到達できません」を食いつぶしたためにErrorCode WSAETIMEDOUT(10060)が表示されます。

助言がありますか?ファイアウォールの「高度なセキュリティ」設定を調べましたが、役に立ちませんでした。

ありがとう...

4

1 に答える 1

1

上記のコメントを参照してください。SendTo / ReceiveFromテストを実装する実行可能ファイルだけでなく、すべてのプログラムへの「宛先到達不能」メッセージにファイアウォールを開くルールを適用する必要があります。

于 2011-06-28T20:08:50.223 に答える