<?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=67352&amp;view=findpost&amp;p=504924</guid>
        <pubDate>Mon, 08 Nov 2004 12:08:31 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504924</link>
        <description><![CDATA[Duke Nuken: Предлагаю обмен, мой код на код для вставки смайликов (bmp) в Rich Edit.<br>Задача простая, есть bmp файл, MFC проект. Простое диалоговое окно.<br>Нажимеш на кнопку и эта bmp записываеться в Rich Edit.<br>Никак не могу смайлы добавить в проект :) <br>Сделаеш и код твой.]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504883</guid>
        <pubDate>Mon, 08 Nov 2004 11:37:06 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504883</link>
        <description><![CDATA[MAxZ: гм... а можешь тогда привести новый код?]]></description>
        <author>MAxZ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504868</guid>
        <pubDate>Mon, 08 Nov 2004 11:25:17 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504868</link>
        <description><![CDATA[Duke Nuken: Гм. Это уже устаревший код. <br>
Я был таки не прав, сервак точно нужно на аснхронных сокетах писать.<br>
Там все сокеты обрабатываються в одном потоке.<br>
<br>
Чтоже до устаревшего кода, то если ты внимательно читал, то это БЛОКИРУЕМЫЕ сокеты.<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">AcceptSocket = accept( mysocket, NULL, NULL );</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
поток заморозиться, ожидая accept.]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504829</guid>
        <pubDate>Mon, 08 Nov 2004 10:28:09 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=504829</link>
        <description><![CDATA[MAxZ: <strong class='tag-b'>Duke Nuken</strong>, по поводу последнего исходника... (хотел отослать приватное сообщение, но не работает)<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">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Accept the connection.</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;AcceptSocket = SOCKET_ERROR;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while( AcceptSocket == SOCKET_ERROR ) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* вот в этом цикле слушаеться сокет mysocket и как только</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; производиться подключение, создается AcceptSocket и передаеться</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; в поток. Сам mysocket возвращается в режим ожидания. */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AcceptSocket = accept( mysocket, NULL, NULL );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned long id;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CreateThread ( NULL, 0, WorkOnSocket, (LPVOID) AcceptSocket, 0, &amp;id );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
по коду:<br>
а если подключение не производится?<br>
тогда сразу идёт создавать поток?&#33;<br>
<br>
глобально:<br>
после обнаружение подключения клиентом программа создаёт отдельный поток, к-й получает поступившую на сокет информацию, так?<br>
он работает с копией сокета или самим экземпляром сокета?]]></description>
        <author>MAxZ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=474298</guid>
        <pubDate>Mon, 04 Oct 2004 07:29:37 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=474298</link>
        <description><![CDATA[Duke Nuken_: Вообщем, провозился с этой ассинхронностью4  дня. Таки сделал.<br>
И знаете что я думаю? Что это ПОЛНАЯ чушь. Она ничерта не дает ни в<br>
скорости, ни в надежности, ни в ресурсоемкости...<br>
<br>
Если писать сервак который обрабатывает много клиентов, то это делаеться просто<br>
обычными блокируемыми сокетами. Один из них слушает в цикле и как только производиться<br>
конект создает новый сокет функцией accept и передает его обработку в поток, а сам <br>
возвращаеться в ожидание. <br>
<br>
Вот 100% рабочий код на неограниченое кол-во подключений.<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">&nbsp;</div><div class="code_line">DWORD WINAPI WorkOnSocket(LPVOID lpParam);</div><div class="code_line">&nbsp;</div><div class="code_line">UINT Server_Run (LPVOID pParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;</div><div class="code_line">WORD wVersionRequested;</div><div class="code_line">WSADATA wsaData;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">wVersionRequested = MAKEWORD( 2, 2 );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// открываем сокет</div><div class="code_line">&nbsp;&nbsp; if (WSAStartup( wVersionRequested, &amp;wsaData ))</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox (NULL,&quot;Ошибка инициализации dll&quot;,0,0); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// создаем сокет </div><div class="code_line">&nbsp;&nbsp; SOCKET mysocket; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; mysocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);</div><div class="code_line">&nbsp;</div><div class="code_line">// привязываем сокет к порту</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SOCKADDR_IN socketaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_addr.s_addr &nbsp;= htonl(INADDR_ANY); //inet_addr(&quot;192.168.1.19&quot;);; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_port = htons (17700);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (bind(mysocket,(SOCKADDR*) &amp;socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox (NULL,&quot;Жопа&quot;,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else MessageBox (NULL,&quot;Привязываем сокет к 17700 порту&quot;,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(listen(mysocket , 1) == SOCKET_ERROR )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox(NULL, &quot;listen Error&quot;, &quot;Error&quot;, MB_OK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//----------------------</div><div class="code_line">&nbsp;&nbsp;// Create a SOCKET for accepting incoming requests.</div><div class="code_line">&nbsp;&nbsp;SOCKET AcceptSocket;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//----------------------</div><div class="code_line">&nbsp;&nbsp;// Accept the connection.</div><div class="code_line">&nbsp;&nbsp;while(1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;AcceptSocket = SOCKET_ERROR;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while( AcceptSocket == SOCKET_ERROR ) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* вот в этом цикле слушаеться сокет mysocket и как только</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; производиться подключение, создаеться AcceptSocket и передаеться</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; в поток. Сам mysocket возвращаеться в режим ожидания. */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AcceptSocket = accept( mysocket, NULL, NULL );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned long id;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CreateThread ( NULL, 0, WorkOnSocket, (LPVOID) AcceptSocket, 0, &amp;id );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; // break;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">closesocket(mysocket);</div><div class="code_line">&nbsp;</div><div class="code_line">// закрываем сокет &nbsp; </div><div class="code_line">&nbsp;&nbsp; if (WSACleanup() == 0) MessageBox (NULL,&quot;Закрытие сокета удачно&quot;,0,0); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; return 1;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">DWORD WINAPI WorkOnSocket(LPVOID lpParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;char cstr[100];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET client = (SOCKET) lpParam;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int recvd = recv (client, cstr, sizeof(cstr), 0); //client? допустим, мы на сервере!</div><div class="code_line">// &nbsp;MessageBox (NULL, cstr, &quot;Полученые данные&quot;,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char send_cstr[] = &quot;Data get OK. Thanks you.&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int sent = send (client, send_cstr, sizeof(send_cstr), 0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;closesocket(client);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 1;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Duke Nuken_</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=472227</guid>
        <pubDate>Fri, 01 Oct 2004 07:48:45 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=472227</link>
        <description><![CDATA[Duke Nuken: Вообщем вопрос. Как следует поступать при такой схеме:<br><br>Есть сервер и клиент.<br>1 этап - сервер) Я создаю сокет и вешаю на него событие ACCEPT. <br>начинаю ожидать его функцией WSAWaitForMultipleEvents()<br>2 этап - клиент) Соеденяюсь с сервером. connect() и тутже отправляю данные send()<br>3 этап - сервер) Обрабатываю событие WSAEnumNetworkEvents() и пытаюсь<br>сделать accept на новый сокет.<br>4 этап - сервер) Пытаюсь забрать присланые на сервер данные recv()<br><br>Бред происходит в том, что если клиент сразу же после конекта отсылает данные<br>до того как на сервере производиться accept нового соеденения, то данные отсылаються <br>в никуда. ТОесть нужно успеть сделать accept на сервере. Ну ставить всякие Sleep на <br>клиенте этоже не дело. <br>Я вот не пойму никак если секет создаеться командой socket, то он изначально какой?<br>Синхронный или асинхронный? Я точно знаю что он блокируемый. Но вот если использовать<br>функцию WSAAsyncSelect() то сокет становиться не блокируемым на сервере. А если на клиенте<br>блокируемый? То гда что? Ни кто из них не измениться? Ну тоесть не станит из блокируемого<br> в не блокируемый и на оборот.]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=471724</guid>
        <pubDate>Thu, 30 Sep 2004 15:30:17 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=471724</link>
        <description><![CDATA[UncleBob: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Muran, 27.09.04, 18:01</span><div class='quote '>этож какая загрузка проца идет.. </div></div><br>
Нулевая. Сокеты блокирующие =&gt; accept блокируется до подключения нового клиента.]]></description>
        <author>UncleBob</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=471636</guid>
        <pubDate>Thu, 30 Sep 2004 14:14:30 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=471636</link>
        <description><![CDATA[Duke Nuken_: Вообщем хотелось бы написать клиент-сервер программы чтобы при каждом обрашении на сервер<br>
для обработки создавался отдельный сокет и он обрабатывался в отдельном потоке.<br>
<br>
Проблема. После того как производиться привязка события к порту функцией WSAEventSelect()<br>
функция recv() перестает коректно работать. Дело в том, что когда просто слушать порт и <br>
после конекта вызывать recv(), то она замерает в ожидании пока не получит какие-либо данные.<br>
А после того как на слушающий сокет вешаеться событие и не успели отправить данные, то recv()<br>
завершаеться сразуже с результатом -1. <br>
Почему так происходит?<br>
<br>
<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">WORD wVersionRequested;</div><div class="code_line">WSADATA wsaData;</div><div class="code_line">&nbsp;</div><div class="code_line">wVersionRequested = MAKEWORD( 2, 2 );</div><div class="code_line">&nbsp;</div><div class="code_line">// открываем сокет</div><div class="code_line">&nbsp;&nbsp; if (WSAStartup( wVersionRequested, &amp;wsaData ))</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox (NULL,&quot;Ошибка инициализации dll&quot;,0,0); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// создаем сокет </div><div class="code_line">&nbsp;&nbsp; SOCKET ListenSocket; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);</div><div class="code_line">&nbsp;</div><div class="code_line">// привязываем сокет к порту</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SOCKADDR_IN socketaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_addr.s_addr &nbsp;= htonl(INADDR_ANY); //inet_addr(&quot;192.168.1.19&quot;);; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_port = htons (17700);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (bind(ListenSocket,(SOCKADDR*) &amp;socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox (NULL,&quot;Жопа&quot;,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else MessageBox (NULL,&quot;Привязываем сокет к 17700 порту&quot;,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(listen(ListenSocket , 1) == SOCKET_ERROR )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox(NULL, &quot;listen Error&quot;, &quot;Error&quot;, MB_OK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">WSAEVENT NewEvent;</div><div class="code_line">&nbsp;</div><div class="code_line">NewEvent = WSACreateEvent();</div><div class="code_line">WSAEventSelect ( ListenSocket, &nbsp;NewEvent, FD_ACCEPT | FD_CLOSE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">SOCKET AcceptSocket; //сокет на приемом соеденения</div><div class="code_line">char cstr[255]; // буфер приема</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//-------------------------</div><div class="code_line">// Wait for network events on all sockets</div><div class="code_line">int Index = WSAWaitForMultipleEvents(1, &amp;NewEvent, FALSE, WSA_INFINITE, FALSE);</div><div class="code_line">&nbsp;</div><div class="code_line">WSAEnumNetworkEvents(ListenSocket, EventArray, &amp;NetworkEvents);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if( ConnectEvent.lNetworkEvents &amp; FD_ACCEPT )</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;AcceptSocket = WSAAccept(ListenSocket, &amp;saClient, &amp;iClientSize, NULL, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int recvd = recv (AcceptSocket, cstr, sizeof(cstr), 0); // получаем данные с сокета</div><div class="code_line">&nbsp;&nbsp; &nbsp;MessageBox (NULL, cstr, &quot;Переданые данные&quot;,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;closesocket(AcceptSocket);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">.......</div></ol></div></div></div></div> <br>
<br>
<br>
Вот в строке int recvd = recv (AcceptSocket, cstr, sizeof(cstr), 0); <br>
происходит глюк, потому что функция перестает ожидать что ей чтото прислали<br>
и если есть данные она их отображает, если их нет выдает ошибку.<br>
Почему не происходит ожидание?<br>
<br>
Есть другой вариант, слушать события для новосозданого сокета (AcceptSocket),<br>
но чтото странно работают эти события. Когда я ожидаю события FD_WRITE на AcceptSocket,<br>
то оно тутже наступает. Почему спрашиваеться???<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">&nbsp;</div><div class="code_line">int Index = WSAWaitForMultipleEvents(1, &amp;NewEvent, FALSE, WSA_INFINITE, FALSE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">SOCKET AcceptSocket; //сокет на приемом соеденения</div><div class="code_line">char cstr[255]; // буфер приема</div><div class="code_line">&nbsp;</div><div class="code_line">WSAEnumNetworkEvents(ListenSocket, EventArray, &amp;NetworkEvents);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">WSAEVENT NewEvent2;</div><div class="code_line">WSANETWORKEVENTS NetworkEvents2;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if( ConnectEvent.lNetworkEvents &amp; FD_ACCEPT )</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;AcceptSocket = accept( ListenSocket, NULL, NULL );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NewEvent2 = WSACreateEvent();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAEventSelect ( AcceptSocket, &nbsp;NewEvent2, FD_WRITE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Index = WSAWaitForMultipleEvents(1, &amp;NewEvent2, FALSE, WSA_INFINITE, FALSE);</div><div class="code_line">&nbsp;</div><div class="code_line">// &nbsp;MessageBox (NULL, &quot;Ожидаем передачу данных&quot;, &quot;Сокеты&quot;,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int recvd = recv (AcceptSocket, cstr, sizeof(cstr), 0); // получаем данные с сокета</div><div class="code_line">&nbsp;&nbsp; &nbsp;MessageBox (NULL, cstr, &quot;Переданые данные&quot;,0);</div></ol></div></div></div></div>]]></description>
        <author>Duke Nuken_</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=470409</guid>
        <pubDate>Wed, 29 Sep 2004 10:20:02 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=470409</link>
        <description><![CDATA[Duke Nuken: Код не рабочий (том половина переменных не определена и чему они равны не понятно)... <br>
И так разобраться не могу, а там потоков накручено.<br>
Как всегда - проще понять и написать свой код, чем разобраться в чужом.<br>
<br>
Люди скажите мне вот что:<br>
<br>
В схема с Eventam&#39;и такая?<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">socket() </div><div class="code_line">bind()</div><div class="code_line">listen()</div><div class="code_line">&nbsp;</div><div class="code_line">цикл </div><div class="code_line">{ &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAWaitForMultipleEvents()</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAEnumNetworkEvents()</div><div class="code_line">&nbsp;&nbsp; ... и тут разбор того что за событие пришло... &nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
1) Как я понял тут accept вообще не используеться. Да?<br>
2) Если функция описана так <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">WSAWaitForMultipleEvents(2, &amp;NewEvent, FALSE, WSA_INFINITE, FALSE);</div></ol></div></div></div></div><br>
И нет не одного подключения, что она вернет? Ну тоесть она замрет в ожидании как accept или <br>
отдаст ошибку?<br>
3) Непойму какое событие получает WSAEnumNetworkEvents если нет подключенных?]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469903</guid>
        <pubDate>Tue, 28 Sep 2004 20:26:03 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469903</link>
        <description><![CDATA[Muran: вот откуда-то выдрал.. старая прога... или тест.. не помню.. но вроде работает и для понимания достаточно..<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">&nbsp;</div><div class="code_line">DWORD _stdcall &nbsp;ReadThread(LPVOID pParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET*pSock=(SOCKET*)pParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAEVENT &nbsp;wsaEvent[2];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;DWORD err=1,index;</div><div class="code_line">&nbsp;&nbsp;WSANETWORKEVENTS &nbsp;NetworkEvents;</div><div class="code_line">&nbsp;&nbsp;DWORD EventIndex,dwErr,dwFlag=MSG_PARTIAL,dwRet,dwNum;</div><div class="code_line">&nbsp;&nbsp;char buf[BLOCK_LENGTH+4];</div><div class="code_line">&nbsp;&nbsp;WSABUF wsabuf;</div><div class="code_line">&nbsp;&nbsp;wsabuf.len=300;</div><div class="code_line">&nbsp;&nbsp;wsabuf.buf=new char[wsabuf.len];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;wsaEvent[0]=StopEvent;</div><div class="code_line">&nbsp;&nbsp;wsaEvent[1]=WSACreateEvent();</div><div class="code_line">&nbsp;&nbsp;WSAEventSelect(*pSock,wsaEvent[1],FD_READ|FD_CLOSE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;while(err)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;EventIndex=WSAWaitForMultipleEvents(2,wsaEvent,FALSE,WSA_INFINITE,FALSE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;index=EventIndex-WSA_WAIT_EVENT_0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(index==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAEnumNetworkEvents(*pSock,wsaEvent[1],&amp;NetworkEvents);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(NetworkEvents.lNetworkEvents&amp;FD_READ)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(NetworkEvents.iErrorCode[FD_READ_BIT]==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dwRet=WSARecv(*pSock,&amp;wsabuf,1,&amp;dwNum,&amp;dwFlag,NULL,NULL/*CompletionROUTINE*/);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dwRet=WSARecv(*pSock,&amp;wsabuf,1,&amp;dwNum,&amp;dwFlag,NULL,NULL/*CompletionROUTINE*/);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dwErr=WSAGetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;%s\n&quot;,wsabuf.buf);</div><div class="code_line">&nbsp;</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; recv(*pSock,buf,BLOCK_LENGTH,0);</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&quot;%s\n&quot;,buf);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(NetworkEvents.lNetworkEvents&amp;FD_CLOSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(NetworkEvents.iErrorCode[FD_CLOSE_BIT]==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WSACloseEvent(wsaEvent[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;closesocket(*pSock);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete pSock;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;closesocket(*pSock);</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete pSock;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetEvent(hStop[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">DWORD _stdcall EventSelect(LPVOID pParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;SOCKET &nbsp;Listen,sock;</div><div class="code_line">&nbsp;&nbsp;SOCKADDR_IN addr;</div><div class="code_line">&nbsp;&nbsp;WSAEVENT &nbsp;wsaEvent[3];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;DWORD err=1,index,tmp;</div><div class="code_line">&nbsp;&nbsp;WSANETWORKEVENTS &nbsp;NetworkEvents;</div><div class="code_line">&nbsp;&nbsp;DWORD EventIndex;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Listen=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);</div><div class="code_line">&nbsp;&nbsp;if(Listen==SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;addr.sin_family=AF_INET;</div><div class="code_line">&nbsp;&nbsp;addr.sin_addr.s_addr=GetCurrentIP();</div><div class="code_line">&nbsp;&nbsp;addr.sin_port=htons(7007);</div><div class="code_line">&nbsp;&nbsp;if(bind(Listen,(PSOCKADDR)&amp;addr,sizeof(addr))==SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;closesocket(Listen);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;wsaEvent[0]=StopEvent;</div><div class="code_line">&nbsp;&nbsp;wsaEvent[1]=WSACreateEvent();</div><div class="code_line">&nbsp;&nbsp;wsaEvent[2]=WSA_INVALID_EVENT;</div><div class="code_line">&nbsp;&nbsp;WSAEventSelect(Listen,wsaEvent[1],FD_ACCEPT|FD_CLOSE);</div><div class="code_line">&nbsp;&nbsp;listen(Listen,5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;while(err)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;EventIndex=WSAWaitForMultipleEvents(2,wsaEvent,FALSE,WSA_INFINITE,FALSE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;index=EventIndex-WSA_WAIT_EVENT_0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(index==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WSAEnumNetworkEvents(Listen,wsaEvent[1],&amp;NetworkEvents);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tmp=WSAGetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(NetworkEvents.lNetworkEvents&amp;FD_ACCEPT)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(NetworkEvents.iErrorCode[FD_ACCEPT_BIT]==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SOCKET*pSock=new SOCKET;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*pSock=accept(Listen,NULL,NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ResetEvent(hStop[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;Starting clinet\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CloseHandle(CreateThread(NULL,0,ReadThread,(LPVOID)pSock,0,NULL));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(NetworkEvents.lNetworkEvents&amp;FD_CLOSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp;if(NetworkEvents.iErrorCode[FD_CLOSE_BIT]==0)</div><div class="code_line">// &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WSACloseEvent(wsaEvent);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;closesocket(Listen);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetEvent(hStop);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">// &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;printf(&quot;Terminated...\n&quot;);</div><div class="code_line">&nbsp;&nbsp;WSACloseEvent(wsaEvent[1]);</div><div class="code_line">&nbsp;&nbsp;closesocket(Listen);</div><div class="code_line">&nbsp;&nbsp;SetEvent(hStop[0]);</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2004-09-28T20:30:24+00:00">28.09.04, 20:30</time></span></span><br>
1. а механизм дает возможность более гибкой работы с вводом&#092;выодом в сокеты..<br>
поток-оьработччик работает только когда ему есть чем заниматься..<br>
принимать подключения, или читать даные..<br>
все остальное время он не мешает работе других потоков..<br>
<br>
2. всегда есть возможность прервать ожидание без TrminateThread или длитльных таймаутов простыв выставлением евента]]></description>
        <author>Muran</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469600</guid>
        <pubDate>Tue, 28 Sep 2004 13:29:28 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469600</link>
        <description><![CDATA[Duke Nuken: to ViGOur <br>
<br>
Слушай, поясни, будь добр, что вообще дает механизм с использованием <br>
этих WSAEventSelect? <br>
Ну вот когда делаеш аксепт, то там создаеться новый сокет.<br>
С ним работаеш (принимаеш, отправляеш данные), а потом просто закрываеш этот <br>
созданый сокет. <br>
<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">socket() </div><div class="code_line">bind()</div><div class="code_line">listen()</div><div class="code_line">цикл accept()</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; recv с новым сокетом</div><div class="code_line">&nbsp;&nbsp; &nbsp; send с новым сокето</div><div class="code_line">&nbsp;&nbsp; &nbsp; closesocket с новым сокетом</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
<br>
А как получаеться схема с WSAEventSelect?]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469590</guid>
        <pubDate>Tue, 28 Sep 2004 13:21:04 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469590</link>
        <description><![CDATA[ViGOur: ТЫ немного не то нашел&#33; :)<br>
Просто ты нашел как работать с асинхронным вводом&#092;выводом на сокетах.<br>
На accept зависает так как ожидает соединения, когда какой-нибудь клиент сделает connect к данному серверу в дебаге ты пойдешь дальше...<br>
<br>
И все же лучше использовать WSAEventSelect&#33; ;) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2004-09-28T13:26:57+00:00">28.09.04, 13:26</time></span></span><br>
А происходит в твоем коде вот что:<br>
После того как принимаем соединение, мы что-то там отправляем,<br>
в данном случае наш обьект событие находится в занятом состоянии...<br>
После этого мы вызываем WSAWaitForMultipleEvents в котором ожидаем, когда закончится операция ввода&#092;вывода на сокете, когда операция заканчивается, обьект событие переходит в свободное состояние. С помощью WSAGetOverlappedResult мы проверяем на сколько корректно прошла I&#092;O операция.<br>
Ели прошла с ошибкой, то закрываем сокет и и выходим, иначе отсылаем ккие-то там данные и читаем начиная с WSAWaitForMultipleEvents&#33;  :)]]></description>
        <author>ViGOur</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469566</guid>
        <pubDate>Tue, 28 Sep 2004 13:10:32 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=469566</link>
        <description><![CDATA[Duke Nuken: Так. Разобрался с потоками, согласен кривой метод accept в цикле крутить,<br>
но в потоке терпимо и не жрет почти ничего. Я смотрел, код в ожидании еъст<br>
меньше одного процента.<br>
<br>
Нашол вот такой вот код на майкрософте с использованием WSAWaitForMultipleEvents<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">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Declare and initialize variables</div><div class="code_line">&nbsp;&nbsp;WSABUF DataBuf;</div><div class="code_line">&nbsp;&nbsp;char buffer[DATA_BUFSIZE];</div><div class="code_line">&nbsp;&nbsp;DWORD EventTotal = 0, </div><div class="code_line">&nbsp;&nbsp; &nbsp;RecvBytes = 0, </div><div class="code_line">&nbsp;&nbsp; &nbsp;Flags = 0, </div><div class="code_line">&nbsp;&nbsp; &nbsp;BytesTransferred = 0, </div><div class="code_line">&nbsp;&nbsp; &nbsp;CallBack = 0;</div><div class="code_line">&nbsp;&nbsp;WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS];</div><div class="code_line">&nbsp;&nbsp;WSAOVERLAPPED AcceptOverlapped;</div><div class="code_line">&nbsp;&nbsp;SOCKET ListenSocket, AcceptSocket;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Initialize Winsock</div><div class="code_line">&nbsp;&nbsp;WSADATA wsaData;</div><div class="code_line">&nbsp;&nbsp;WSAStartup(MAKEWORD(2,2), &amp;wsaData);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Create a listening socket bound to a local</div><div class="code_line">&nbsp;&nbsp;// IP address and the port specified</div><div class="code_line">&nbsp;&nbsp;ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;sockaddr_in service;</div><div class="code_line">&nbsp;&nbsp;service.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp;service.sin_port = htons(17700);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;service.sin_addr.s_addr = htonl(INADDR_ANY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Bind the listening socket to the local IP address</div><div class="code_line">&nbsp;&nbsp;// and port number</div><div class="code_line">&nbsp;&nbsp;bind(ListenSocket, (SOCKADDR *) &amp;service, sizeof(SOCKADDR));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Set the socket to listen for incoming</div><div class="code_line">&nbsp;&nbsp;// connection requests</div><div class="code_line">&nbsp;&nbsp;listen(ListenSocket, 1);</div><div class="code_line">&nbsp;&nbsp;//printf(&quot;Listening...\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Accept and incoming connection request</div><div class="code_line">&nbsp;&nbsp;AcceptSocket = accept(ListenSocket, NULL, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Create an event handle and setup an overlapped structure.</div><div class="code_line">&nbsp;&nbsp;EventArray[EventTotal] = WSACreateEvent();</div><div class="code_line">&nbsp;&nbsp;ZeroMemory(&amp;AcceptOverlapped, sizeof(WSAOVERLAPPED));</div><div class="code_line">&nbsp;&nbsp;AcceptOverlapped.hEvent = EventArray[EventTotal];</div><div class="code_line">&nbsp;&nbsp;DataBuf.len = DATA_BUFSIZE;</div><div class="code_line">&nbsp;&nbsp;DataBuf.buf = buffer;</div><div class="code_line">&nbsp;&nbsp;EventTotal++;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Call WSARecv to receive data into DataBuf on </div><div class="code_line">&nbsp;&nbsp;// the accepted socket in overlapped I/O mode</div><div class="code_line">&nbsp;&nbsp;if (WSARecv(AcceptSocket, &amp;DataBuf, 1, &amp;RecvBytes, &amp;Flags, &amp;AcceptOverlapped, NULL) == SOCKET_ERROR) </div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (WSAGetLastError() != WSA_IO_PENDING)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;printf(&quot;Error occurred at WSARecv()\n&quot;);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp;// Process overlapped receives on the socket</div><div class="code_line">&nbsp;&nbsp;while (1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD Index;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Wait for the overlapped I/O call to complete</div><div class="code_line">&nbsp;&nbsp; &nbsp;Index = WSAWaitForMultipleEvents(EventTotal, EventArray, FALSE, WSA_INFINITE, FALSE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Reset the signaled event</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAResetEvent(EventArray[Index - WSA_WAIT_EVENT_0]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Determine the status of the overlapped event</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAGetOverlappedResult(AcceptSocket, &amp;AcceptOverlapped, &amp;BytesTransferred, FALSE, &amp;Flags);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// If the connection has been closed, close the accepted socket</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (BytesTransferred == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;printf(&quot;Closing Socket %d\n&quot;, AcceptSocket);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;closesocket(AcceptSocket);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WSACloseEvent(EventArray[Index - WSA_WAIT_EVENT_0]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// If data has been received, echo the received data</div><div class="code_line">&nbsp;&nbsp; &nbsp;// from DataBuf back to the client</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (WSASend(AcceptSocket, &amp;DataBuf, 1, &amp;RecvBytes, Flags, &amp;AcceptOverlapped, NULL) == SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;printf(&quot;WSASend() is busted\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//----------------------------------------- &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;// Reset the changed flags and overlapped structure</div><div class="code_line">&nbsp;&nbsp; &nbsp;Flags = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ZeroMemory(&amp;AcceptOverlapped, sizeof(WSAOVERLAPPED));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AcceptOverlapped.hEvent = EventArray[Index - WSA_WAIT_EVENT_0];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//-----------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Reset the data buffer</div><div class="code_line">&nbsp;&nbsp; &nbsp;DataBuf.len = DATA_BUFSIZE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DataBuf.buf = buffer;</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
<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">&nbsp;&nbsp;AcceptSocket = accept(ListenSocket, NULL, NULL);</div></ol></div></div></div></div><br>
Я тестироывал обращаясь из IE на указаный порт, получал в ответ<br>
в броузаер чтото вроде <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */* Accept-Language: ru Cookie: phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A32%3A%222063c1608d6e0baf80249c42e2be5804%22%3Bs%3A6%3A%22userid%22%3Bi%3A2%3B%7D; avtforum_data=a%3A0%3A%7B%7D; b=b User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322) Host: 192.168.1.19:17700 Connection: close МММММММММММММММММММММММММММММММММММММММММММММММММММММММММММ...<br>
</div></div><br>
и при дебаге скрипт оставался на строке аксепта.  :blink: <br>
<br>
Вообщем хотелбы для себя понять теорию.<br>
Вот создал я сокет. Забиндил его на порт. Слушаю.<br>
Потом, судя по коду выполняеться аксепт.<br>
<br>
Потом вызываеться функция WSACreateEvent(); - создаеться событие <br>
а дальше идет какаято ерунда смысла которой я не могу понять...<br>
Поясните, плз.]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468565</guid>
        <pubDate>Mon, 27 Sep 2004 14:01:48 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468565</link>
        <description><![CDATA[Muran: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Duke Nuken, 27.09.04, 16:45</span><div class='quote '>        AcceptSocket = SOCKET_ERROR;<br>
        while ( AcceptSocket == SOCKET_ERROR ) {<br>
            AcceptSocket = accept( m_socket, NULL, NULL );<br>
        }</div></div><br>
<br>
за одно вот это автору надо оторвать руки...<br>
чему они учат??<br>
<br>
этож какая загрузка проца идет.. <br>
<br>
поищи на форуме по поводу WSAEventSelect.. сильная вещь и решает все проблемы..<br>
я выкладывал готовуб потоковую функцию.. там в ней все есть..]]></description>
        <author>Muran</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468546</guid>
        <pubDate>Mon, 27 Sep 2004 13:45:05 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468546</link>
        <description><![CDATA[Duke Nuken: Гм. Если чесно я не умею пока создавать потоки. Но код исправил.<br>
Между прочим от нефиг делать зашол на msdn.microsoft.com  и нашол там полностью <br>
рабочий код. Так что всем рекомендую. <br>
<br>
<a class='tag-url' href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/complete_server_code.asp' target='_blank'>http://msdn.microsoft.com/library/default....server_code.asp</a><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">&nbsp;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &quot;winsock2.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">void main() {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Initialize Winsock.</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSADATA wsaData;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int iResult = WSAStartup( MAKEWORD(2,2), &amp;wsaData );</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( iResult != NO_ERROR )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;Error at WSAStartup()\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Create a socket.</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET m_socket;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( m_socket == INVALID_SOCKET ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Error at socket(): %ld\n&quot;, WSAGetLastError() );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WSACleanup();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Bind the socket.</div><div class="code_line">&nbsp;&nbsp; &nbsp;sockaddr_in service;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;service.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp;service.sin_addr.s_addr = inet_addr( &quot;127.0.0.1&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp;service.sin_port = htons( 27015 );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( bind( m_socket, (SOCKADDR*) &amp;service, sizeof(service) ) == SOCKET_ERROR ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;bind() failed.\n&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;closesocket(m_socket);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Listen on the socket.</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( listen( m_socket, 1 ) == SOCKET_ERROR )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Error listening on socket.\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Accept connections.</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET AcceptSocket;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf( &quot;Waiting for a client to connect...\n&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;AcceptSocket = SOCKET_ERROR;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while ( AcceptSocket == SOCKET_ERROR ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AcceptSocket = accept( m_socket, NULL, NULL );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf( &quot;Client Connected.\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;m_socket = AcceptSocket; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Send and receive data.</div><div class="code_line">&nbsp;&nbsp; &nbsp;int bytesSent;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int bytesRecv = SOCKET_ERROR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char sendbuf[32] = &quot;Server: Sending Data.&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char recvbuf[32] = &quot;&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bytesRecv = recv( m_socket, recvbuf, 32, 0 );</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf( &quot;Bytes Recv: %ld\n&quot;, bytesRecv );</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf( &quot;Bytes Sent: %ld\n&quot;, bytesSent );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468533</guid>
        <pubDate>Mon, 27 Sep 2004 13:30:36 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468533</link>
        <description><![CDATA[bum: В поток его :wall:]]></description>
        <author>bum</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468507</guid>
        <pubDate>Mon, 27 Sep 2004 13:06:38 +0000</pubDate>
        <title>Сервсер на сокетах</title>
        <link>https://forum.sources.ru/index.php?showtopic=67352&amp;view=findpost&amp;p=468507</link>
        <description><![CDATA[Duke Nuken: Вообщем пытаюсь создать нормальный сервер ка сокетах.<br>
Проблема в том, что не могу понять как сделать accept (прием) <br>
при конекте.<br>
То есть, создаеться сокет, вешаеться на порт, слушает обращения, а дальше что?<br>
Как правильно исполльзовать accept? Как обработать обращение на прослушиваемый порт?<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">&nbsp;</div><div class="code_line">WORD wVersionRequested;</div><div class="code_line">WSADATA wsaData;</div><div class="code_line">&nbsp;</div><div class="code_line">wVersionRequested = MAKEWORD( 2, 2 );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// открываем сокет</div><div class="code_line">&nbsp;&nbsp; if (WSAStartup( wVersionRequested, &amp;wsaData ))</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox (NULL,&quot;Ошибка инициализации dll&quot;,0,0); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// создаем сокет </div><div class="code_line">&nbsp;&nbsp; SOCKET mysocket; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; mysocket = socket(PF_INET, SOCK_STREAM, 0 );</div><div class="code_line">&nbsp;</div><div class="code_line">// привязываем сокет к порту</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SOCKADDR_IN socketaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_family = AF_INET;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_addr.s_addr &nbsp;= INADDR_ANY; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;socketaddr.sin_port = htons (17700);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (bind(mysocket,(LPSOCKADDR) &amp;socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox (NULL,&quot;Жопа&quot;,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else MessageBox (NULL,&quot;Привязываем сокет к 17700 порту&quot;,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(listen(mysocket , 1) == SOCKET_ERROR )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MessageBox(NULL, &quot;listen Error&quot;, &quot;Error&quot;, MB_OK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sockaddr new_sockaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int lenz_sockaddr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;SOCKET newsocket = accept ( mysocket, &nbsp;&amp;new_sockaddr, &amp;lenz_sockaddr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBox (NULL, &quot;Пришол вызов&quot;, 0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">closesocket(mysocket);</div><div class="code_line">&nbsp;</div><div class="code_line">// закрываем сокет &nbsp; </div><div class="code_line">&nbsp;&nbsp; if (WSACleanup() == 0) MessageBox (NULL,&quot;Закрытие сокета удачно&quot;,0,0); </div></ol></div></div></div></div><br>
<br>
Такой код просто завершаеться, тоесть сокет создаться, забиндился и закрылся.<br>
Как поставить его в режим ожидания?]]></description>
        <author>Duke Nuken</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	