<?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=29875&amp;view=findpost&amp;p=203648</guid>
        <pubDate>Mon, 14 Apr 2003 07:59:31 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203648</link>
        <description><![CDATA[FaileR: Обе программы - пример того, как не надо писать сетевые приложения.<br><br>.... зачем тебе сдался bind в клиенте? <br>connect уже сам создает запись в системе .... просто создай сокет и потом сделай connect, а если так хочешь оставить (что совсем не правильно) то поставь опцию REUSEADDR на сокет ........ <br><br><br>ЗЫ: и еще imho такую конструкцию (вопрос - ответ) лучше на UDP строить ... <br>ЗЫЫ: после shutdown(.., 2) но надо вызывать closesocket() :) (это совсем не обязательно);<br>]]></description>
        <author>FaileR</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203647</guid>
        <pubDate>Sat, 12 Apr 2003 18:49:34 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203647</link>
        <description><![CDATA[ViSko: Осторожнее надо с shutdown а то твой клиент закрывает передачу и получения данных от сеокета, потом ты закрываешь соединения следовательно клиент не может отправить пакет закрытия серверу и тот после физического разрыва ждёт пакета CLOSE но ни хрена не получает.<br><br>]]></description>
        <author>ViSko</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203646</guid>
        <pubDate>Sat, 12 Apr 2003 13:45:07 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203646</link>
        <description><![CDATA[old_lamer: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>old_lamer, 11.04.03, 18:47:38</span><div class='quote '><br>И помоему, неуверен (сейчас я дома а баг на работе остался), но помоему клиент не мог подключиться (ошибка) даже когда сианс связи идет с другим клиентом, а помоему, при вызове функции connect() клиент должен ожидать accept() на серваке.<br><br></div></div><br><br>Я сегодня даже на работу пришел, проверить этот баг, и вот что я заметил:<br><br>Когда я подсоединяюсь к серверу открывая для клиента тот же порт с которого я уже соединялся (проводил сеанс), то происходит ошибка подключения, но соединяясь с другого порта всё нормально.<br><br>По логике вещей это похоже на таймаут при разорванном соединении...]]></description>
        <author>old_lamer</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203645</guid>
        <pubDate>Fri, 11 Apr 2003 15:48:13 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203645</link>
        <description><![CDATA[ViSko: Я твои проги сохранил посомтрю в чём там трабал, самому интересно стало :)<br>но вобще для отладки полезно использовать: netstat -a - выводи список активных TCP соединений + очень полезно,- пишет состояние сокета на данный момент.]]></description>
        <author>ViSko</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203644</guid>
        <pubDate>Fri, 11 Apr 2003 14:47:38 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203644</link>
        <description><![CDATA[old_lamer: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>ViSko, 11.04.03, 11:56:55</span><div class='quote '><br><br>Вообще TCP делает таймаут при закрытие если, остались блуждающие пакеты от последней передачи,тобишь сервак не получил сегмент подтверждения от клиента о закрытие соединения,.<br>но время этого таймаута не превышает 30сек x 2 для BSD систем<br>или 5 максимум для других.  <br>Но Windows свой TCP слизала с BSD посему наверное минута.<br><br></div></div><br><br><br>Да, где-то минуту или 2 я немогу подключиться снова, но ведь клиент разсоединяется правильно (или нет?)<br><br>И помоему, неуверен (сейчас я дома а баг на работе остался), но помоему клиент не мог подключиться (ошибка) даже когда сианс связи идет с другим клиентом, а помоему, при вызове функции connect() клиент должен ожидать accept() на серваке.<br><br>В любом случае я не понимаю таймаут с какой радости происходит??]]></description>
        <author>old_lamer</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203643</guid>
        <pubDate>Fri, 11 Apr 2003 07:56:55 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203643</link>
        <description><![CDATA[ViSko: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>old_lamer, 11.04.03, 11:37:39</span><div class='quote '>Дык процесс виснет  не в цикле....<br>Виснет на комманде accept()<br>А главное что через несколько минут, снова соединяется!<br><br>А многопоточность помоему решит только один вопрос - одновременное обсуживание N количество клиентов.<br><br>Это похоже на какой-то таймаут...<br>...но что это за таймаут ???<br></div></div><br><br>Вообще TCP делает таймаут при закрытие если, остались блуждающие пакеты от последней передачи,тобишь сервак не получил сегмент подтверждения от клиента о закрытие соединения,.<br>но время этого таймаута не превышает 30сек x 2 для BSD систем<br>или 5 максимум для других.  <br>Но Windows свой TCP слизала с BSD посему наверное минута.<br><br>]]></description>
        <author>ViSko</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203642</guid>
        <pubDate>Fri, 11 Apr 2003 07:37:39 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203642</link>
        <description><![CDATA[old_lamer: Дык процесс виснет &nbsp;не в цикле....<br>Виснет на комманде accept()<br>А главное что через несколько минут, снова соединяется!<br><br>А многопоточность помоему решит только один вопрос - одновременное обсуживание N количество клиентов.<br><br>Это похоже на какой-то таймаут...<br>...но что это за таймаут ???<br>]]></description>
        <author>old_lamer</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203641</guid>
        <pubDate>Thu, 10 Apr 2003 06:51:27 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203641</link>
        <description><![CDATA[ViSko: Твой сервак пример того что любой сервак желательно делать многопоточным,<br><br>после обработки запроса пользователя у тебя программа подвешивается на бесконечном цикле while(1) &nbsp;{ ... } &nbsp;он из него просто не выходит и listen с accpet у тебя могут вызваны только один раз, раздели на два потока один ждёт подключения а второй <br>обрабатвает запрос. <br><br>На худой конец сделай нормальный цикл, а то у тебя получилась одноразовая программа.<br>]]></description>
        <author>ViSko</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203640</guid>
        <pubDate>Wed, 09 Apr 2003 14:20:59 +0000</pubDate>
        <title>Socket</title>
        <link>https://forum.sources.ru/index.php?showtopic=29875&amp;view=findpost&amp;p=203640</link>
        <description><![CDATA[old_lamer: Проблема....<br><br>Нарисовал простинький TCP серврер.<br>А он работает на один бок!<br><br>Клиент к нему удачно присоединяется, передаёт данные и отсоединяется, а когда снова делает попытку подсоединения, то при коннекте происходит ошибка!<br><br>Делаю всё как и раньше делал (когдато) а не работает!<br>Уже пробовал шатдаунить....<br><br>А хотел то я всего то cdplayer удалённо с другой машины запускать....<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">//server.cpp&#60;br&#62;#include &#60;windows.h&#62;&#60;br&#62;#include &#60;winsock.h&#62;&#60;br&#62;#include &#60;shellapi.h&#62;&#60;br&#62;&#60;br&#62;&#60;br&#62;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,&#60;br&#62;                    PSTR szCmdLine, int iCmdShow)&#60;br&#62;{&#60;br&#62;      char buf[1000];&#60;br&#62;&#60;br&#62;      WSADATA WSAData;&#60;br&#62;      int nRc=WSAStartup(0x0101,&amp;WSAData);&#60;br&#62;&#60;br&#62;      SOCKET MyS = socket(AF_INET, SOCK_STREAM,0);&#60;br&#62;      &#60;br&#62;      sockaddr_in addr;&#60;br&#62;      addr.sin_family = AF_INET;&#60;br&#62;      addr.sin_port = htons(5151);&#60;br&#62;      addr.sin_addr.s_addr=inet_addr(&quot;192.168.100.11&quot;);&#60;br&#62;      if(bind(MyS,(LPSOCKADDR)&amp;addr,sizeof(addr)) == SOCKET_ERROR)&#60;br&#62;      {&#60;br&#62;            return;&#60;br&#62;      }&#60;br&#62;      else{&#60;br&#62;        if(listen(MyS,5) == SOCKET_ERROR)&#60;br&#62;            {&#60;br&#62;               return;&#60;br&#62;            }&#60;br&#62;&#60;br&#62;          int nAddrLen=sizeof(sockaddr);&#60;br&#62;          SOCKET In;&#60;br&#62;            sockaddr Ot;&#60;br&#62;            while(1){&#60;br&#62;                In=accept(MyS,&amp;Ot,&amp;nAddrLen);&#60;br&#62;                int Z=recv(In,buf,10,0);&#60;br&#62;                  shutdown(In,2);&#60;br&#62;                  closesocket(In);&#60;br&#62;                  if(Z&#62;0){&#60;br&#62;                        if(buf[0]==0){break;}&#60;br&#62;                        else if(buf[0]==1){&#60;br&#62;                          ShellExecute(0,&quot;open&quot;,&quot;cdplayer&quot;,0,0,0);&#60;br&#62;                        }&#60;br&#62;                        else if(buf[0]==2){&#60;br&#62;                          ShellExecute(0,&quot;open&quot;,&quot;cdplayer&quot;,0,0,SW_SHOW);&#60;br&#62;                        }&#60;br&#62;                        else if(buf[0]==3){&#60;br&#62;                          ShellExecute(0,&quot;open&quot;,&quot;cdplayer e:\&quot;,0,0,SW_SHOW);&#60;br&#62;                        }&#60;br&#62;                  }&#60;br&#62;            }&#60;br&#62;          closesocket(MyS);&#60;br&#62;      }&#60;br&#62;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><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">#include &#60;windows.h&#62;&#60;br&#62;#include &#60;winsock.h&#62;&#60;br&#62;&#60;br&#62;&#60;br&#62;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,&#60;br&#62;                    PSTR szCmdLine, int iCmdShow)&#60;br&#62;{&#60;br&#62;      char buf[1000];&#60;br&#62;      WSADATA WSAData;&#60;br&#62;      int nRc=WSAStartup(0x0101,&amp;WSAData);&#60;br&#62;&#60;br&#62;      SOCKET MyS = socket(AF_INET, SOCK_STREAM,0);&#60;br&#62;      &#60;br&#62;      sockaddr_in addr;&#60;br&#62;      addr.sin_family = AF_INET;&#60;br&#62;      addr.sin_port = htons(5050);&#60;br&#62;      addr.sin_addr.s_addr=inet_addr(&quot;192.168.100.70&quot;);&#60;br&#62;      if(bind(MyS,(LPSOCKADDR)&amp;addr,sizeof(addr)) == SOCKET_ERROR)&#60;br&#62;      {&#60;br&#62;            return;&#60;br&#62;      }&#60;br&#62;&#60;br&#62;      MessageBox(0,&quot;Connecting&quot;,&quot;Connect&quot;,0);&#60;br&#62;      &#60;br&#62;      sockaddr_in ServerAddr;&#60;br&#62;      ServerAddr.sin_family = AF_INET;&#60;br&#62;      ServerAddr.sin_port = htons(5151);&#60;br&#62;      ServerAddr.sin_addr.s_addr=inet_addr(&quot;192.168.100.11&quot;);&#60;br&#62;      if(connect(MyS,(LPSOCKADDR)&amp;ServerAddr,sizeof(ServerAddr))== SOCKET_ERROR)&#60;br&#62;      {&#60;br&#62;      MessageBox(0,&quot;No Connected&quot;,&quot;Connect&quot;,0);&#60;br&#62;                  return;&#60;br&#62;      }&#60;br&#62;      MessageBox(0,&quot;Connected!&quot;,&quot;Connect&quot;,0);&#60;br&#62;&#60;br&#62;      buf[0]=3;&#60;br&#62;      send(MyS,buf,1,0);&#60;br&#62;      shutdown(MyS,2);&#60;br&#62;      closesocket(MyS);&#60;br&#62;&#60;br&#62;}</div></ol></div></div></div></div><br><br>[right]<span class="tag-color tag-color-named" data-value="red" style="color: red">[ Теги [сode][/сode] добавлены by Leprecon ]</span>[/right]]]></description>
        <author>old_lamer</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	