Мне нужно искать устройства UPNP в моей сети. Есть несколько примеров, но, используя 2 разных подхода, я никогда не получаю ответа.using (UdpClient udpClient = new())
{
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, 0));
IPAddress multicastAddress = IPAddress.Parse("239.255.255.250");
udpClient.JoinMulticastGroup(multicastAddress);
byte[] requestBytes = Encoding.UTF8.GetBytes("M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nST: ssdp:all\r\nMX: 3\r\n\r\n");
IPEndPoint remoteEndPoint = new(multicastAddress, 1900);
await udpClient.SendAsync(requestBytes, requestBytes.Length, remoteEndPoint);
DateTime startTime = DateTime.Now;
while (DateTime.Now - startTime < timeout)
{
try
{
UdpReceiveResult result = await udpClient.ReceiveAsync().
WithTimeout(timeout - (DateTime.Now - startTime));
string response = Encoding.UTF8.GetString(result.Buffer);
// here we parse the response...
}
}
< /code>
Здесь udpclient.receiveasync никогда не возвращается, пока не будет достигнут тайм -аут.IPEndPoint localEndPoint = new(IPAddress.Any, 0);
IPEndPoint ssdpEndPoint = new(IPAddress.Parse("239.255.255.250"), 1900);
using (Socket udpSocket = new(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
udpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpSocket.Bind(localEndPoint);
udpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ssdpEndPoint.Address, IPAddress.Any));
udpSocket.SendTo(Encoding.ASCII.GetBytes("M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nST: ssdp:all\r\nMX: 3\r\n\r\n"), ssdpEndPoint);
byte[] buffer = new byte[4096];
DateTime thresholdTime = DateTime.UtcNow.Add(timeout);
while (thresholdTime > DateTime.UtcNow)
{
if (udpSocket.Available > 0)
{
EndPoint remote = new IPEndPoint(IPAddress.Any, 0);
int size = udpSocket.ReceiveFrom(buffer, ref remote);
// here we parse the response
}
}
< /code>
В этом случае udpsocket.available всегда 0 (ничего не получен). < /p>
Я могу неправильно понять, как здесь работает сетевая часть, так что некоторые вопросы: < /p>
Если нет доступных устройств, я должен получить как минимум что -то вроде «Пустого списка»? Так что udpclient.receiveasync возвращается до достижения тайм -аута, и есть некоторые ответные байты на сокет.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -an-answer
SSDP Devices Discovery Discovery: Никогда не получайте ответа ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить информацию NullInjectorError для Android в Chrome Inspect Devices
Anonymous » » в форуме Android - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как получить информацию NullInjectorError для Android в Chrome Inspect Devices
Anonymous » » в форуме Android - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-