<?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=103695&amp;view=findpost&amp;p=2034408</guid>
        <pubDate>Tue, 05 Aug 2008 09:00:24 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=2034408</link>
        <description><![CDATA[Dem_max: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> Посылка данных методом send() не всегда происходит сразу. Он накапливает данные в внутреннем буфере и потом их отсылает. </div></div><br>
Вроде логично ведь send() это не блокирующая функция, а посему для получения сообщения об отправке нужно обрабатывать WSAEnumNetworkEvents().]]></description>
        <author>Dem_max</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=2034380</guid>
        <pubDate>Tue, 05 Aug 2008 08:39:27 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=2034380</link>
        <description><![CDATA[vdv2701: Если на то пошло, то у меня просьба к Diviner:<br>приведи пожалуйста текст включаемого файла &quot;stdafx.h&quot;]]></description>
        <author>vdv2701</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=1968703</guid>
        <pubDate>Mon, 26 May 2008 15:08:14 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=1968703</link>
        <description><![CDATA[gmaker: Я писал как-то программу для передачи файлов. На делфи и на С. Сейчас гляну ссылку - кому интересно<br>
<a class='tag-url' href='http://gmaker.h10.ru/sources/winipx.cab' target='_blank'>ссылка</a>.Там на IPX было. Может кому пригодиться.<br>
С буфером тоже была проблема - не докачивал большие файлы. Всегда оставались куски.<br>
После я прочитал, что Посылка данных методом send() не всегда происходит <strong class='tag-b'>сразу</strong>. Он накапливает данные в внутреннем буфере и потом их отсылает. Где-то есть исправленная версия, где все принимается нормально :)<br>
Сейчас не найду. За примерчик автору спасибо. Особо за http протокол.]]></description>
        <author>gmaker</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789741</guid>
        <pubDate>Thu, 28 Jul 2005 17:53:39 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789741</link>
        <description><![CDATA[MinLexx: Есть функция TransmitFile() вроде... в Winsock... :unsure:]]></description>
        <author>MinLexx</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789647</guid>
        <pubDate>Thu, 28 Jul 2005 15:31:53 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789647</link>
        <description><![CDATA[IEZ: <strong class='tag-b'>johen</strong><br>
Присоединяюсь к словам <strong class='tag-b'>bugger</strong>а и цепляю краткую статейку по &quot;Работа с WinSocket в Visual C++&quot;.<br>
Почитай, поймешь будет проще.]]></description>
        <author>IEZ</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789637</guid>
        <pubDate>Thu, 28 Jul 2005 15:22:56 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789637</link>
        <description><![CDATA[Diviner: Совет хороший дал <strong class='tag-b'>bugger</strong>.<br>
У меня есть пара минут свободных, поэтому покажу простой пример.<br>
Ну прежде всего <strong class='tag-b'>johen</strong> тебе надо определиться с протоколом (протоколом уровня приложений если по научному), мне кажется не стоит чего-то там своего изобретать, типа придумывать свои ключевые слова или байты, а стоит воспользоваться HTTP или FTP протоколом.<br>
<br>
Когда-то смотрел, что там IExplorer посылает, получилась такая консольная програмка:<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 &quot;stdafx.h&quot;</div><div class="code_line">#include &#60;winsock.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;iostream.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSADATA wsa; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SOCKET sock, sock2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct sockaddr_in peer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;struct sockaddr_in accp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned accp_len =sizeof(accp);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int k,net,size,len;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int headlen,bodylen;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int port = 80 ; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char * pbuf,* pbuf2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char sbuf[204800]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char Buf[200480]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char sbuf1[256]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char sbuf2[256]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char answ[512]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FILE *hd;</div><div class="code_line">&nbsp;&nbsp; &nbsp;BOOL HEADER=FALSE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main(int argc, char* argv[])</div><div class="code_line">{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;\n $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $\t\t\t\t\t\t\t\t &nbsp; &nbsp; &nbsp; &nbsp;$\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $\t\t\t\t\t\t\t\t &nbsp; &nbsp; &nbsp; &nbsp;$\n&quot;); &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $\t &nbsp; &nbsp; &nbsp;Simple Web Server by Elektrik (ICQ:262102) &nbsp;\t &nbsp; &nbsp; &nbsp; &nbsp;$\n&quot;); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $\t\t\t\t\t\t\t\t &nbsp; &nbsp; &nbsp; &nbsp;$\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $\t\t\t\t\t\t\t\t &nbsp; &nbsp; &nbsp; &nbsp;$\n&quot;); &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;\n port: &quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(sbuf,&#39;{text}&#39;,sizeof(sbuf)); </div><div class="code_line">&nbsp;&nbsp; &nbsp;gets(sbuf);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(int i=0;i&#60;strlen(sbuf);i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!isdigit(sbuf[i]))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n &nbsp;port: not correct\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;port=atoi(sbuf);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(port==0) port=80;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">while(1)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSAStartup(MAKEWORD(1,1),&amp;wsa);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sock = socket(AF_INET,SOCK_STREAM,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( sock == INVALID_SOCKET) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot; Cannot bild server\n&quot;);</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; &nbsp;peer.sin_family = AF_INET; </div><div class="code_line">&nbsp;&nbsp; &nbsp;peer.sin_port = htons(port); </div><div class="code_line">&nbsp;&nbsp; &nbsp;peer.sin_addr.s_addr = htonl(INADDR_ANY); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;net = bind(sock,(struct sockaddr *)&amp;peer,sizeof(peer));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ( net!=0) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot; Cannot bild server with such port\n&quot;);</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; &nbsp;printf(&quot; Server started [port==%d] .....&quot;,port);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;listen(sock,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; waiting for qwery\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sock2=accept(sock,(struct sockaddr *) &amp;accp,(int *) &amp;accp_len);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (sock2==-1)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n accept==-1\n&quot;);</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;</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(sbuf,&#39;{text}&#39;,sizeof(sbuf)); </div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(Buf,&#39;{text}&#39;,sizeof(Buf));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;hd=fopen(&quot;c:\1.txt&quot;,&quot;at&quot;); </div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(net=0,len=0,bodylen=0;net!=SOCKET_ERROR;) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; endl &#60;&#60; &quot; recv: &quot;; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;net = recv(sock2,sbuf,sizeof(sbuf),0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(net==SOCKET_ERROR) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n recv == -1\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; net &#60;&#60; endl &#60;&#60; endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (net==0) goto _SEND_;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fwrite(sbuf,1,net,hd);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;strncat(Buf,sbuf,net);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;%s&quot;,sbuf); &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// \r == 13(OxD) \n == 10(0xA) &nbsp;</div><div class="code_line">// 13 10 13 10</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!HEADER)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int i=0;i&#60;strlen(Buf);i++) &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if( // Точка границы заголовка и тела ответа</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buf[i] &nbsp; == 10 &nbsp;&amp;&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buf[i-1] == 13 &nbsp;&amp;&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buf[i-2] == 10 &nbsp;&amp;&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buf[i-3] == 13</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) // Заголовок принят, обрабатываем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i++; &nbsp; &nbsp; &nbsp; // учитываем ноль</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;headlen=i; // Длина заголовка</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(strstr(Buf,&quot;GET&quot;)) goto _SEND_; // Всё приняли, иначе POST</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(strstr(Buf,&quot;POST&quot;))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(Buf[i]!=0) len=strlen(Buf+i); // Сколько приняли байт из тела, если POST</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n bodylen: &quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pbuf=strstr(Buf,&quot;Content-Length:&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(pbuf)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sscanf(pbuf,&quot;%s%s&quot;,sbuf1,sbuf2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bodylen=atol(sbuf2); // Длина тела</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;%d\n\n&quot;,bodylen); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HEADER=TRUE; // Заголовок обработан</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</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; &nbsp; &nbsp; &nbsp;if(HEADER) // Заголовок обработан</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;len+=net; // Сколько приняли байт из тела</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(len&#62;=bodylen) // Приняли всё, посылаем ответ</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">_SEND_: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcpy(answ,&quot;HTTP/1.1 200 OK\r\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(answ,&quot;Server: My\r\n&quot;); &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(answ,&quot;Connection: close\r\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(answ,&quot;Content-Type: text/html\r\n\r\n&quot;); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(answ,&quot;&#60;html&#62;&#60;body&#62;\n&#60;script language=\&quot;JavaScript\&quot;&#62;\nwindow.status = \&quot;_ok_\&quot;;\n&#60;/script&#62;\n&#60;/body&#62;&#60;/html&#62;&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(net=0,k=0,len=strlen(answ);net!=SOCKET_ERROR;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; endl &#60;&#60; endl &#60;&#60; &quot;\n\n send: &quot;; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;net=send(sock2,(char*)(answ+k),len-k,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; net &#60;&#60; endl &#60;&#60; endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;memset(Buf,&#39;{text}&#39;,sizeof(Buf));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strncpy(Buf,answ+k,net);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;%s&quot;,Buf);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k+=net; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(net==SOCKET_ERROR) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot; send == -1\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(k&#62;=len) // Отослали всё</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n\n answer was sending\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fclose(hd); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(sock) closesocket(sock);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(sock2) closesocket(sock2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WSACleanup();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;\n\n server closed\n&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">}</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; end\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Только при посылке файла(сначала отсылаешь текстовый заголовок, потом открываешь файл в бинарном виде и отсылаешь) будь аккуратен с текстовыми функциями.<br>
Например у меня здесь строку if(Buf[i]&#33;=0) len=strlen(Buf+i); // Сколько приняли байт из тела, если POST<br>
надо убирать.<br>
<br>
Помню в первый раз при приёме большого файла у меня были проблемы с циклом записи из сокета с моим размером буфера, файл не докачивался(кто нибудь знает почему?). Поэтому я с тех пор взял за правило пробивать оптимальный размер буфера для данного сокета с помощью setsockopt(так файл скачается на 100%) и больше не задавался этим вопросом.<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">setsockopt(sock,SOL_SOCKET,SO_RCVBUF,(char*)&amp;size,sizeof(int));</div><div class="code_line">buf = new char [size]=&quot;{text}&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(k=0,i=0;i!=SOCKET_ERROR;k+=i)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;i=recv(sock,buf,sizeof(buf),0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(i==0) break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;здесь складываем в большой буфер, например с помощью memmove, или сначала в файл</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">...</div><div class="code_line">delete [] buf;</div></ol></div></div></div></div>]]></description>
        <author>Diviner</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789521</guid>
        <pubDate>Thu, 28 Jul 2005 13:01:41 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789521</link>
        <description><![CDATA[bugger: как это не банально, но совет будет такой: лучше прочитай книжку по сетевому программированию. там все подробно разложено и рассказано. учиться программировать сетевое приложение в форуме - это очень ненадежно, так как у тебя так и не появится четкого понимания, а знания ты будешь вырывать кусками.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>лучше потратить неделю, а потом за пять минут долететь...</div></div>]]></description>
        <author>bugger</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789437</guid>
        <pubDate>Thu, 28 Jul 2005 11:50:28 +0000</pubDate>
        <title>Передача файлов по сети</title>
        <link>https://forum.sources.ru/index.php?showtopic=103695&amp;view=findpost&amp;p=789437</link>
        <description><![CDATA[johen: Прошу привести простой пример передачи файлов между клиентом и сервером, используя сокеты и чистый WinAPI (не используя MFC). Пример должен быть консольной прогой.<br><br>Спасибо.]]></description>
        <author>johen</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	