从所有网络适配器向239.255.255.253(端口:427)发送多播并接收消息C#
我在一个特定的netwrok适配器上用Wireshark录制了一个序列 在那里,我看到了从我的一个网络适配器到239.255.255.253的传出多播。然后是来自具有特定IP地址的“设备”的响应 我已经拥有的:从所有网络适配器向239.255.255.253(端口:427)发送多播并接收消息C#,c#,networking,multicast,C#,Networking,Multicast,我在一个特定的netwrok适配器上用Wireshark录制了一个序列 在那里,我看到了从我的一个网络适配器到239.255.255.253的传出多播。然后是来自具有特定IP地址的“设备”的响应 我已经拥有的: public List<IPAddress> GetLocalNetworkInterfaces() { localNetworkInterfaces = new List<IPAddress>(); foreach (NetworkInterf
public List<IPAddress> GetLocalNetworkInterfaces()
{
localNetworkInterfaces = new List<IPAddress>();
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (var unicastIp in nic.GetIPProperties().UnicastAddresses)
{
if (nic.OperationalStatus == OperationalStatus.Up && unicastIp.Address.AddressFamily == AddressFamily.InterNetwork
&& !IPAddress.IsLoopback(unicastIp.Address))
{
localNetworkInterfaces.Add(unicastIp.Address);
}
}
}
return localNetworkInterfaces;
}
public void SendMultiCast(List<IPAddress> iPAddresses, int port)
{
responseOfAvailableVehicles = new List<string>();
string availableVehicle;
if (iPAddresses.Count != 0)
{
try
{
foreach (IPAddress iPAddress in iPAddresses)
{
IPAddress address = iPAddress;
byte[] response;
long longFromIP = 4026531837; //Is 239.255.255.253
port = 427;
UdpClient udpClient = new UdpClient(new IPEndPoint(address, 0));
udpClient.Client.ReceiveTimeout = 3000;
// Here start Multicast
// And receive response
var endpoint = new IPEndPoint(longFromIP, port);
udpClient.EnableBroadcast = true;
udpClient.Send(DiscoveryPayload, DiscoveryPayload.Length, endpoint);
response = udpClient.Receive(ref endpoint);
}
}
catch (Exception ex)
{
}
}
}
公共列表GetLocalNetworkInterfaces()
{
localNetworkInterfaces=新列表();
foreach(NetworkInterface.GetAllNetworkInterfaces()中的NetworkInterface nic)
{
foreach(nic.GetIPProperties().unicastaddress中的变量unicastIp)
{
如果(nic.OperationalStatus==OperationalStatus.Up&&unicastIp.Address.AddressFamily==AddressFamily.InterNetwork
&&!IPAddress.IsLoopback(unicastIp.Address))
{
localNetworkInterfaces.Add(unicastIp.Address);
}
}
}
返回本地网络接口;
}
公共void发送多播(列出IP地址、int端口)
{
responseOfAvailableVehicles=新列表();
字符串可用车辆;
if(ipaddress.Count!=0)
{
尝试
{
foreach(IP地址中的IP地址)
{
IP地址=IP地址;
字节[]响应;
long longFromIP=4026531837;//是239.255.255.253
端口=427;
UdpClient UdpClient=新的UdpClient(新的IPEndPoint(地址,0));
udpClient.Client.ReceiveTimeout=3000;
//这里开始多播
//并收到回复
var端点=新的IPEndPoint(longFromIP,端口);
udpClient.EnableBroadcast=true;
发送(DiscoveryPayload、DiscoveryPayload.Length、endpoint);
响应=udpClient.Receive(ref端点);
}
}
捕获(例外情况除外)
{
}
}
}
老实说,我不确定这种方法是否正确,或者我是否完全走错了方向
如何使用C#发送多播并接收响应?除非您更改设备中的设置,否则路由和服务器通常不会转发广播消息。多播是一种UDP广播消息。您可能需要将设备更改为不阻止任何通信的简单集线器。假设路由和服务器转发广播消息。如何继续?我现在用
udpClient.Send
扩展了整个程序。但在这里,我得到了一个“套接字操作引用了不可用的网络”异常。@AlexF,但我不想将其发送到广播地址,只想发送到239.255.255.253。我还可以使用广播地址吗?它不是一个多播地址,而是您将它发送到一个特定的IP地址。