UDP パケットを受信するためにマルチキャスト グループに接続しようとしています。私が使用しているコードはうまく機能しており、パケットを受信していますが、これまで問題はありませんでした。しかし、マルチキャスト参加メッセージを確認する必要があるスイッチをパケットが通過する必要があるという新しい要件があります。以前はダムスイッチでしたが、これは問題ではありませんでした。
マルチキャスト グループに参加するには、次のコードを使用します。
var LocalAddress = "228.12.12.27";
var LocalPort = 46715;
var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddress), LocalPort);
var RxSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
RxSocket.Blocking = false;
RxSocket.ReceiveBufferSize = UInt16.MaxValue;
RxSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
RxSocket.Bind(new IPEndPoint(IPAddress.Any, LocalEndPoint.Port));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50);
RxSocket.Close();
IGMP Join メッセージを生成する行は次のとおりです。
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));
そして、IGMP Join メッセージが送信されます。
ただし、Wireshark でネットワークをスヌープすると、IGMP メッセージのチェックサムが正しくないことがわかります。
これは私のコードの問題ですか、それとも入力の問題ですか? それとも他に何かありますか?