C#.NETソケットベースのアプリケーションの送信側で次のコードを実行しています。
const int port = 1110;
System.Net.Sockets.UdpClient udp = null;
udp = new System.Net.Sockets.UdpClient(host, port);
...
byte[] data = m.Serialize();
udp.Send(data, data.Length);
そして、私はこのコードを受信側で実行しています:
System.Net.IPEndPoint replyAddress = new System.Net.IPEndPoint(
System.Net.IPAddress.Any, port);
while ((udp != null) && (udp.Available > 0))
{
...
}
UDPポート1110の受信側の(Windows 7)ファイアウォールに例外を追加しました。ただし、ファイアウォールを完全に無効にしない限り、受信側のコードがwhileループに入ることはありません。ポート1110の例外が有効にならないのはなぜですか?Microsoft Network Monitorを使用すると、ポート1110に着信しようとしているメッセージを次のような説明で確認できますUDP:SrcPort = 1082, DstPort = 1110, Length = 11
(ネットワークモニターは、ファイアウォールを通過してローカルシステム宛てのメッセージだけでなく、ローカルネットワーク上のすべてのメッセージを確認できると思います)。ファイアウォールを完全に無効にしない限り、アプリケーションはファイアウォールを受信しません。
ここで何が起こっているのかを理解したり、修正したりするにはどうすればよいですか?ループ内にブレークポイントを設定し、反対側にデータを送信させることができます。ファイアウォールを無効にした瞬間にブレークポイントに到達したため、トラフィックが通過できることはわかっていますが、ファイアウォールに関する何かがそれを妨げています。私のファイアウォールの例外は次のようになります。
全般的
- 有効:True
- 処置:接続を許可してください
プログラムとサービス
- 指定された条件を満たしたすべてのプログラム
- すべてのプログラムとサービスに適用する
コンピューター
- (チェックを外して空)これらのコンピューターからの接続のみを許可する
- (チェックされていない&空)これらのコンピューターからの接続については、このルールをスキップしてください
プロトコルとポート
- プロトコルタイプ:UDP
- プロトコル番号:17
- ローカルポート:特定のポート
- ポート:1110
- リモートポート:すべてのポート
範囲
- ローカルIPアドレス:任意のIPアドレス
- リモートIPアドレス:任意のIPアドレス
高度
- このルールが適用されるプロファイルを指定します:ドメイン、プライベート、パブリック(すべてチェック済み)
- エッジトラバーサル:エッジトラバーサルを許可する
ユーザー
- 許可されたユーザー:(チェックされていない&空)これらのユーザーからの接続のみを許可する
- 例外:(チェックされていない&空)これらのユーザーからの接続については、このルールをスキップしてください