<?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=412026&amp;view=findpost&amp;p=3800516</guid>
        <pubDate>Fri, 31 May 2019 10:26:05 +0000</pubDate>
        <title>Создать на сокетах Windows аналог работы сервера в RAD Studio</title>
        <link>https://forum.sources.ru/index.php?showtopic=412026&amp;view=findpost&amp;p=3800516</link>
        <description><![CDATA[MikeRen: Интересно, спасибо&#33;]]></description>
        <author>MikeRen</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=412026&amp;view=findpost&amp;p=3757655</guid>
        <pubDate>Thu, 25 Jan 2018 09:59:36 +0000</pubDate>
        <title>Создать на сокетах Windows аналог работы сервера в RAD Studio</title>
        <link>https://forum.sources.ru/index.php?showtopic=412026&amp;view=findpost&amp;p=3757655</link>
        <description><![CDATA[Oleg2004: Логика работы UDP-клиент/сервера простая.<br>Сервер UDP ждет входящее сообщение от клиента, находясь в бесконечном цикле recvfrom()<br>Во входном сообщении для стека TCP/IP самое главное - это полученный от клиента IP-адрес. Именно туда и будет идти ответ.<br>Но это при взаимодействии клиент/сервер.<br>Если входящего сообщения нет,т.е. не клиент является инициирующей стороной, то и ответа от сервера нет.<br>По вашей идее вам нужно взаимодействие не клиент/сервер, а сервер/клиент, причем клиент тоже висит на recvfrom(), т.е по сути является вариантом сервера. Это вполне реальный сценарий. В этом случае просто серверу надо передать адрес клиента программным способом.<br>Т.е. у вас просто другой протокол общения, и его надо именно так и организовать.<br>И в данном случае на клиенте придется сделать bind() к локальному адресу, иначе пакеты не найдут адресат.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=412026&amp;view=findpost&amp;p=3757639</guid>
        <pubDate>Thu, 25 Jan 2018 06:19:23 +0000</pubDate>
        <title>Создать на сокетах Windows аналог работы сервера в RAD Studio</title>
        <link>https://forum.sources.ru/index.php?showtopic=412026&amp;view=findpost&amp;p=3757639</link>
        <description><![CDATA[a_n_y_a: В RAD Studio есть такой код:<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">IdUDPServer5-&#62;SendBuffer(&quot;192.168.2.253&quot;,4002,RawToBytes(LightSend, 11));</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
IdUDPServer5 - это компонент сервера в RAD Studio.<br>
Надо в VC++ 2012 года реализовать аналог этого оператора, чтобы передавать слиенту данные. Я прошёлся поиском по форуму, нашел ссылку на пример. Все работает, но там сначала сервер принимает функцией recvfrom, в которую приходит адрес клиента, а потом по этому адресу передает данные клиенту. А надо без приема передать данные. Я поправил сервер, теперь он передает. Но клиент для приема у меня не получается.<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">#include &#60;sys/types.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;string.h&#62;</div><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &nbsp;&#60;winsock2.h&#62;</div><div class="code_line">#pragma comment(lib, &quot;Ws2_32.lib&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">int main(){</div><div class="code_line">&nbsp;&nbsp;int clientSocket;///, portNum, nBytes;</div><div class="code_line">&nbsp;&nbsp;char buffer[100];</div><div class="code_line">&nbsp;&nbsp;struct sockaddr_in serverAddr;</div><div class="code_line">&nbsp;&nbsp;struct sockaddr_storage serverStorage;</div><div class="code_line">&nbsp;&nbsp;int addr_size, serverStorage_s;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;/*Create UDP socket*/</div><div class="code_line">&nbsp;&nbsp;WSADATA wsaData;</div><div class="code_line">&nbsp;&nbsp;int iResult = WSAStartup(MAKEWORD(2, 2), &amp;wsaData);</div><div class="code_line">&nbsp;&nbsp;if (iResult != 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;printf(&quot;WSAStartup failed: %d\n&quot;, iResult);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp;}; </div><div class="code_line">&nbsp;&nbsp;clientSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;serverAddr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp;serverAddr.sin_port = htons(4002);</div><div class="code_line">&nbsp;&nbsp;serverAddr.sin_addr.s_addr = inet_addr(&quot;192.168.2.100&quot;);</div><div class="code_line">&nbsp;&nbsp;memset(serverAddr.sin_zero, &#39;{text}&#39;, sizeof serverAddr.sin_zero); &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;addr_size = sizeof serverAddr;</div><div class="code_line">&nbsp;&nbsp;serverStorage_s=sizeof serverStorage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int a = recvfrom(clientSocket,buffer,8,0, (struct sockaddr *)&amp;serverAddr, &amp;addr_size);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (a &#62;0) &nbsp; printf(&quot;Received from server: %s\n&quot;,buffer);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Но он что то не работает, наверное потому, что нет конекта, но конект, если я правильно понимаю,существует только для TCP-IP. Я смотрел функцию recv, но пример в MSDN, для нее только для TCP-IP.<br>
 Что я делаю не правильно?]]></description>
        <author>a_n_y_a</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	