SSDP Devices Discovery Discovery: Никогда не получайте ответаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 SSDP Devices Discovery Discovery: Никогда не получайте ответа

Сообщение Anonymous »

Мне нужно искать устройства 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...
}
}
}
Здесь 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
}
}
}
В этом случае udpsocket.available всегда 0 (ничего не полученного).
Я могу неправильно понять, как работает сетевая часть, поэтому некоторые вопросы:
Если нет доступных устройств, я должен получить, по крайней мере, что -то вроде «пустого списка»? Так что udpclient.receiveasync возвращается до достижения тайм -аута, и есть некоторые байты ответов на сокет.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -an-answer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SSDP Devices Discovery Discovery: Никогда не получайте ответа
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • SSDP Devices Discovery Discovery: Никогда не получайте ответа
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Поиск SSDP в сокетах Python работает непоследовательно в Windows
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как получить информацию NullInjectorError для Android в Chrome Inspect Devices
    Anonymous » » в форуме Android
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как получить информацию NullInjectorError для Android в Chrome Inspect Devices
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»