リモートホストが特定のUDPポート番号でリッスンしているかどうかを調べようとしています。WindowsファイアウォールがICMPポートに到達できませんでしたか?
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);
誰が聴いていない場合、私はのErrorCode WSAECONNRESET(10054)とのソケット例外として受け取るに報告されるICMP「到達不能ポート」を取得:次のように私は(C#で)これを行います。すべて意味がありますが、Windowsファイアウォールが無効になっている場合にのみ発生します。ファイアウォールが有効になっている場合(たとえ私がプログラムの例外を作成したとしても)、おそらくファイアウォールがICMP "port unreachable"を食べてしまったので、私はErrorCode WSAETIMEDOUT(10060)を取得します。
提案がありますか?私はファイアウォールの "高度なセキュリティ"の設定を調べたが、役に立たない。
おかげで...
この問題は、WindowsファイアウォールのICMP「宛先到達不能」メッセージ(「ポート到達不能」は「宛先到達不能」の種類 - タイプ3、コード3)のファイアウォールを開くカスタムルールで修正することができます。しかし、これを行うには、SendTo/ReceiveFromテストを実装する実行可能ファイルだけでなく、すべてのプログラムにルールを適用する必要があります。 – Fred