[Delphi, Winsock]Теряются UDP пакеты при Broadcast'е. Почему?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Proger10, 14 May 2010.

  1. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    В программе с помощью winsock шлю по udp звуковые данные. Если указать IP своего или другого компа, то данные доходят в целости и сохранности. Если указать широковещательный адрес (у меня это 192.168.1.255), то до компа, скоторого отпраляли, данные доходят нормально, а до другого отрывками - отправлееное теряется независимо от способа соединения компов, хоть проводной сеткой (хотя потерь чуть-чуть меньше), хоть беспроводной. В чем может быть причина? Или так и должно быть?
     
    1 person likes this.
  2. telega

    telega New Member

    Joined:
    29 Aug 2009
    Messages:
    29
    Likes Received:
    0
    Reputations:
    0
    ну это же Udp ...
     
  3. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    Это-то понятно! Но ведь если указать НЕ широковещательный адрес, а чей-нибудь ip, то всё доходит нормально!
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну так тут пакеты идет строго всем и приходят в последовательности в которой ты их постал. Почти в такой. А тут получается что пакеты в сеть идет, и если это свитч, то ему приходится напрягаться и всем рассылать по отдельности. Вот могут и быть потери. Хотя мне кажется там не потери, а перемешка скорее всего.
    Попробуй перед отправкой пакета, чтобы первые 4 байта были - порядковым номером пакета и отсылай их. А на приемной стороне отризай их и сохраняй номера и посмотришь тогда точнее какие именно пакеты теряются или мешаются
     
  5. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    slesh, спасибо! Отличная идея!

    Я теперь вообще ничего не понимаю! Всё работает! Хотя я ничего не исправлял! Магия...
    Кстати! Во время проверки обнаружились странные пакеты. Их размер, определяетмый функцией recvfrom -1 (это не тире один, это МИНУС ОДИН). Если их игнорировать на качество звука никак не меняется.
     
  6. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    Странно! Убрал из программы весь код связанный с проверкой - опять звук прерывистый! Вместо "Привет" "П р е" (ну вобщем как-то так)
     
  7. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    Оказывается если поставить Sleep(10); в процидкре приёма, то всё звучит нормально, но это не дело - задержки!
    Странно! Когда использовал NMUDP, то всё было в порядке, хотя алгоритмы такие же. Вроде.
     
    #7 Proger10, 14 May 2010
    Last edited: 14 May 2010
  8. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    А есть способ кодирование аудио, сжимающий лучше, чем mp3??