ローカルネットワーク上で簡単なUDP通信をしようとしています。C#でローカルネットワーク上でUDPマルチキャストを実行するには?
私がやりたいすべては、それが動作する
public void Start()
{
udpClient = new UdpClient(8088);
udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
receiveThread = new Thread(Receive);
receiveThread.Start();
}
public void Receive()
{
while (true)
{
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
var data = udpClient.Receive(ref ipEndPoint);
Message = Encoding.Default.GetString(data);
// Raise the AfterReceive event
if (AfterReceive != null)
{
AfterReceive(this, new EventArgs());
}
}
}
ネットワークここ
私が送信しているコードここ
public void SendMessage(string message)
{
var data = Encoding.Default.GetBytes(message);
using (var udpClient = new UdpClient(AddressFamily.InterNetwork))
{
var address = IPAddress.Parse("224.100.0.1");
var ipEndPoint = new IPEndPoint(address, 8088);
udpClient.JoinMulticastGroup(address);
udpClient.Send(data, data.Length, ipEndPoint);
udpClient.Close();
}
}
と上のすべてのマシンへのマルチキャストを行う私の受信コードされています私のローカルマシンでは完全には動作しますが、ネットワーク経由では動作しません。
- ファイアウォールのようではありません。私は両方のマシンでそれを無効にし、それでも動作しませんでした。
- クライアントマシンのハードコードされたIPアドレス(つまりマルチキャストではない)に直接送信すると機能します。
ご協力いただければ幸いです。
LAN上で動作させるのに問題がありました。 JoinMulticastGroup()を呼び出すときにリッスンする明示的なIPアドレスの2番目の引数がなければ、Docker/Hyper-Vの一部としてインストールした仮想イーサネットドライバを実際にイーサネットではなくマルチキャストグループに参加させるだけでしたアダプタ。複数のネットワークアダプタを使用している場合は、IPアドレスを2番目の引数として使用するメソッドオーバーロードで明示的にマルチキャストグループに参加するIPアドレスを指定する必要があります。 – MEverett