<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872840</guid>
        <pubDate>Fri, 29 Jul 2022 04:18:08 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872840</link>
        <description><![CDATA[Gonarh: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lun2 &#064; <time class="tag-quote__quoted-time" datetime="2022-07-27T18:34:00+00:00">27.07.22, 18:34</time></span><div class='quote '>Почему я не должен получать свое ?</div></div><br>
Потому что ты не знаешь как работает сетевое оборудование. Изучи как работают коммутаторы, фрейм с дст броадкаст улетит во все порты, кроме того откуда прилетел. Если нет петли, разумеется. <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lun2 &#064; <time class="tag-quote__quoted-time" datetime="2022-07-27T18:34:00+00:00">27.07.22, 18:34</time></span><div class='quote '>Это же рассылка ВСЕМ, в числе которых и я :)</div></div><br>
Нет, это рассылка всем, КРОМЕ тебя.<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-07-29T07:21:24+03:00">29.07.22, 04:21</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872772'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2022-07-27T18:48:41+00:00">27.07.22, 18:48</time></span><div class='quote '>Ещё разок:<br>
В результате работы RecvFrom будет получена структура sockaddr.<br>
Где будет информация, кто послал пакет.<br>
Просто попробуй посмотреть, что там.<br>
Какой там будет ip, например.</div></div><br>
Это не показатель, там м.б. src ip 0.0.0.0, тот же дхцп дисковер например.]]></description>
        <author>Gonarh</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872776</guid>
        <pubDate>Wed, 27 Jul 2022 21:00:26 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872776</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>ЫукпШ</strong> все описал точно. В структуре sockaddr должен быть адрес самого себя :yes:]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872772</guid>
        <pubDate>Wed, 27 Jul 2022 18:48:41 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872772</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lun2 &#064; <time class="tag-quote__quoted-time" datetime="2022-07-27T18:34:00+00:00">27.07.22, 18:34</time></span><div class='quote '><strong class='tag-b'>ЫукпШ</strong>, вопрос касался определение не отправившего, а того, что это мое же сообщение, т.е. я прислал сам себе через broadcast...</div></div><br>
Ещё разок:<br>
В результате работы RecvFrom будет получена структура sockaddr.<br>
Где будет информация, кто послал пакет.<br>
Просто попробуй посмотреть, что там.<br>
Какой там будет ip, например.<br>
---<br>
Никто не запрещает посылать информацию самому себе.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872771</guid>
        <pubDate>Wed, 27 Jul 2022 18:34:00 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872771</link>
        <description><![CDATA[Lun2: <strong class='tag-b'>Gonarh</strong>, про петлю - честно говоря, не знаю как ее делать.<br>
Сеть = роутер + 2 компа к нему, никаких доп. настроек.<br>
Broadcast - через sendto() на адрес &quot;255.255.255.255&quot;.<br>
Почему я не должен получать свое ?<br>
Это же рассылка ВСЕМ, в числе которых и я :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-07-27T18:36:38+00:00">27.07.22, 18:36</time></span></span><br>
<strong class='tag-b'>ЫукпШ</strong>, вопрос касался определение не отправившего, а того, что это мое же сообщение, т.е. я прислал сам себе через broadcast...<br>
Ну, насколько я понял, самое простое все же - включить в сообщение какой-то я отслеживать - если получил его, то значит от себя...]]></description>
        <author>Lun2</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872656</guid>
        <pubDate>Tue, 26 Jul 2022 11:17:53 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872656</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872631'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lun2 &#064; <time class="tag-quote__quoted-time" datetime="2022-07-25T18:33:33+00:00">25.07.22, 18:33</time></span><div class='quote '>При приеме пакета UDP можно узнать адрес отправителя и сравнить свой адрес с ним, но дело в том, что чтобы узнать свой адрес, необходимо (если я правильно понял) перебирать сетевые адаптеры,</div></div><br>
<strong class='tag-b'>Lun2</strong>, приём UDP-пакета производится функцией &quot;RecvFrom&quot;.<br>
<a class='tag-url' href='https://docs.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-recvfrom' target='_blank'>ссылка</a><br>
В параметре &quot;sockaddr *from&quot; будет информация о компьютере (&quot;IP&quot; и &quot;PORT&quot;) с которого прислан пакет.<br>
Используя эту информацию UDP-сервер отвечает на запросы UDP-клиентов.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872637</guid>
        <pubDate>Tue, 26 Jul 2022 05:15:08 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872637</link>
        <description><![CDATA[Gonarh: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428836&view=findpost&p=3872631'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Lun2 &#064; <time class="tag-quote__quoted-time" datetime="2022-07-25T18:33:33+00:00">25.07.22, 18:33</time></span><div class='quote '>Дело в том, что при рассылке всем рассылающий получает свое же сообщение в том числе.</div></div><br>
Вот простейший бродкастер юдп на паскале<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, WinSock, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;WM_ASYNC = WM_USER + 1;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button2: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button2Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;FHandle: HWND;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure SockWND(var AMsg: TMessage); message WM_ASYNC;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FWSAData: TWSAData;</div><div class="code_line">&nbsp;&nbsp;FSockAddr: TSockAddrIn;</div><div class="code_line">&nbsp;&nbsp;FSocket: HWND;</div><div class="code_line">&nbsp;&nbsp;Option: Boolean;</div><div class="code_line">&nbsp;&nbsp;Data: String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;WSAStartup(01, FWSAData);</div><div class="code_line">&nbsp;&nbsp;FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);</div><div class="code_line">&nbsp;&nbsp;with FSockAddr do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_addr.S_addr := inet_addr(&#39;Х.Х.Х.166&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Option := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_port := htons(6767);</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_family := AF_INET;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;bind(FSocket, FSockAddr, SizeOf(FSockAddr));</div><div class="code_line">&nbsp;&nbsp;WSAAsyncSelect(FSocket, AllocateHWnd(SockWND), WM_ASYNC, FD_READ);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.SockWND(var AMsg: TMessage);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buffer: array [0..8191] of Char;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Size: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SockAddr: TSockAddrIn;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;with AMsg do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case Msg of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WM_ASYNC: begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case WSAGetSelectEvent(LParam) of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FD_READ:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FillChar(Buffer, 8192, #0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Size := SizeOf(SockAddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;recvfrom(WParam, Buffer[0], 8192, 0, SockAddr, Size);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Caption := StrPas(@Buffer);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DeallocateHWnd(FHandle);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;closesocket(WParam);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WSACleanup;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else DefWindowProc(FHandle, Msg, WParam, LParam);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button2Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FWSAData: TWSAData;</div><div class="code_line">&nbsp;&nbsp;FSockAddr: TSockAddrIn;</div><div class="code_line">&nbsp;&nbsp;FSocket: HWND;</div><div class="code_line">&nbsp;&nbsp;Option: Boolean;</div><div class="code_line">&nbsp;&nbsp;Data: String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;WSAStartup(01, FWSAData);</div><div class="code_line">&nbsp;&nbsp;FSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);</div><div class="code_line">&nbsp;&nbsp;with FSockAddr do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_addr.S_addr := INADDR_BROADCAST;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Option := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetSockOpt(FSocket, SOL_SOCKET, SO_BROADCAST, PChar(@Option), SizeOf(Option));</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_port := htons(6767); // Это порт для броадкаста</div><div class="code_line">&nbsp;&nbsp; &nbsp;sin_family := AF_INET;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;Data := &#39;My first broadcast message!!!&#39;;</div><div class="code_line">&nbsp;&nbsp;SendTo(FSocket, Data[1], Length(Data), 0, FSockAddr, SizeOf(FSockAddr));</div><div class="code_line">&nbsp;&nbsp;closesocket(FSocket);</div><div class="code_line">&nbsp;&nbsp;WSACleanup;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Батон1 - листит юдп порт 6767<br>
Батон2 - срёт броадкастом юдп на порт 6767<br>
У мну ничего не прилетает при броадкасте<br>
Либо у тебя петля в сети, либо ты что-то либо делаешь не так. Показывай код.]]></description>
        <author>Gonarh</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872631</guid>
        <pubDate>Mon, 25 Jul 2022 18:33:33 +0000</pubDate>
        <title>Broadcast рассылка через UDP -  как узнать, что мы получили свое же сообщение</title>
        <link>https://forum.sources.ru/index.php?showtopic=428836&amp;view=findpost&amp;p=3872631</link>
        <description><![CDATA[Lun2: Добрый вечер&#33;<br>Как можно узнать, что в результате рассылки UDP broadcast программа получила свое же сообщение ?<br><br>Дело в том, что при рассылке всем рассылающий получает свое же сообщение в том числе.<br><br>Можно генерировать некоторый случайный ключ при отправке, запоминать его, а при приеме - сравнивать с ним, если совпали, то получили свое же. Интересует кроме этого варианта.<br><br>При приеме пакета UDP можно узнать адрес отправителя и сравнить свой адрес с ним, но дело в том, что чтобы узнать свой адрес, необходимо (если я правильно понял) перебирать сетевые адаптеры, т.к. их может быть несколько. Получается уже не очень просто.<br><br>Опять-таки, как я понимаю, не перебирать их не получится, т.к. рассылающий не указывает, с какого адаптера делается broadcast-рассылка.<br><br>Подскажите, пожалуйста, какой самый простой способ решить эту задачу ?]]></description>
        <author>Lun2</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	