<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mike &#187; Интернет и сеть</title>
	<atom:link href="http://mikhail.krivyy.com/category/zametki/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikhail.krivyy.com</link>
	<description>мнение автора может не совпадать с его точкой зрения ©</description>
	<lastBuildDate>Fri, 10 Feb 2012 08:08:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<mikes>en</mikes>		<item>
		<title>Установка MapNik в Gentoo Linux</title>
		<link>http://mikhail.krivyy.com/2009/10/02/mapnik-gentoo-linux/</link>
		<comments>http://mikhail.krivyy.com/2009/10/02/mapnik-gentoo-linux/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 13:26:50 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Графика]]></category>
		<category><![CDATA[Интернет и сеть]]></category>
		<category><![CDATA[mapnik]]></category>
		<category><![CDATA[postgis]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/?p=1918</guid>
		<description><![CDATA[Все что описано выше проверено на: Linux 2.6.23-gentoo-r3k1 Mapnik 0.6.0 (sci-geosciences/mapnik) osm2pgsql 20090707 (sci-geosciences/osm2pgsql) PostgreSQL 8.3.7 (dev-db/postgresql-base, dev-db/postgresql-server) Python 2.6.2-r1 Установка PostGIS и PostgreSQL 1. Устанавливаем Postgis и PostgreSQL: ACCEPT_KEYWORDS="~x86" USE="proj geos" emerge postgis emerge postgresql-server --config 2. Запускаем PostgreSQL: /etc/init.d/postgresql-8.3 start 3. Создаем базу данных PostGIS: su su - postgres createuser mike createdb -E [...]]]></description>
			<content:encoded><![CDATA[<p>Все что описано выше проверено на:</p>
<ul>
<li>Linux 2.6.23-gentoo-r3k1</li>
<li>Mapnik 0.6.0 (sci-geosciences/mapnik)</li>
<li>osm2pgsql 20090707 (sci-geosciences/osm2pgsql)</li>
<li>PostgreSQL 8.3.7 (dev-db/postgresql-base, dev-db/postgresql-server)</li>
<li>Python 2.6.2-r1</li>
</ul>
<p><span id="more-1918"></span></p>
<p><strong>Установка PostGIS и PostgreSQL</strong></p>
<p>1. Устанавливаем Postgis и PostgreSQL:</p>
<pre>ACCEPT_KEYWORDS="~x86" USE="proj geos" emerge postgis
emerge postgresql-server --config</pre>
<p>2. Запускаем PostgreSQL:</p>
<pre>/etc/init.d/postgresql-8.3 start</pre>
<p>3. Создаем базу данных PostGIS:</p>
<pre>su
su - postgres
createuser mike
createdb -E UTF8 -O mike gis
createlang plpgsql gis
psql -d gis -f /usr/share/postgresql/contrib/lwpostgis.sql
echo "ALTER TABLE geometry_columns OWNER TO mike; ALTER TABLE spatial_ref_sys OWNER TO mike;"  | psql -d gis
ACCEPT_KEYWORDS="~x86" USE="postgres proj doc gdal python bidi" emerge mapnik
ACCEPT_KEYWORDS="~x86" emerge osm2pgsql
psql -d gis -f /usr/share/postgresql/contrib/90000.sql</pre>
<p><strong>Установка Mapnik</strong></p>
<p>4. Устанавливаем Mapnik:</p>
<pre>USE="postgres proj debug doc gdal python bidi" emerge mapnik</pre>
<p>5. Устанавливаем данных Mapnik:</p>
<p>Более подробные инструкции можно найти на <a href="http://wiki.openstreetmap.org/index.php/Mapnik">http://wiki.openstreetmap.org/index.php/Mapnik</a>. Ниже только самое главное:</p>
<p>World boundaries (Границы, 51MB) and coastlines (Береговые линии) (~200MB):</p>
<pre>wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
wget http://hypercube.telascience.org/~kleptog/processed_p.zip
tar -zxvf world_boundaries-spherical.tgz
unzip processed_p.zip
mv coastlines/* world_boundaries/
rmdir coastlines
chmod -R 755 world_boundaries

mkdir /usr/local/share/mapnik
mv world_boundaries /usr/local/share/mapnik</pre>
<p><strong>Установка osm2pgsql</strong></p>
<p>6. Устанавливаем osm2pgsql:</p>
<pre>ACCEPT_KEYWORDS="~x86" emerge osm2pgsql</pre>
<p>7. Получаем данные OSM по заданным координатам:</p>
<pre>wget -O map.osm "http://www.informationfreeway.org/api/0.6/*[bbox=29.637569,56.918102,36.227985,59.435345]"</pre>
<p>7. Добавляем скачанные данных в базу данных:</p>
<pre>./osm2pgsql -d gis ../map.osm</pre>
<p><strong>Генерация карты</strong></p>
<p>8. Скачиваем с <a href="http://svn.openstreetmap.org/applications/rendering/mapnik/">http://svn.openstreetmap.org/applications/rendering/mapnik/</a> Pyhton скрипты для генерации квадратов &#8212; http://svn.openstreetmap.org/applications/rendering/mapnik/generate_image.py и http://svn.openstreetmap.org/applications/rendering/mapnik/generate_tiles.py. Также скачиваем XML файлы описывающие стили карт &#8212; osm.xml;</p>
<p>9. В самом конце файла <strong>generate_tiles.py</strong> правим координаты квадрата и уровни масштабирования. Запускаем <strong>generate_tiles.py</strong>;</p>
<p>10. Используем квадраты по своему усмотрению, например с Google Maps API.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2009/10/02/mapnik-gentoo-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проверка обновления страницы на Perl</title>
		<link>http://mikhail.krivyy.com/2008/09/30/web-site-update-check-perl/</link>
		<comments>http://mikhail.krivyy.com/2008/09/30/web-site-update-check-perl/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 10:47:38 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Web программирование]]></category>
		<category><![CDATA[Интернет и сеть]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/?p=1100</guid>
		<description><![CDATA[Иногда нужно последить за обновление определенных страниц сайтов. Раньше даже были специальные программы &#8212; &#171;Whats new агенты&#187;. Погуглил, в топе выдачи ничего не нашел. Вероятно, из-за засилия динамически генерируемых сайтов, эти программы если не вымерли, а ушли на второй план. Ну нет, так нет, в конце концов Perl не просто так изобрели. Обожаю Perl: #!/usr/bin/perl my [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда нужно последить за обновление определенных страниц сайтов. Раньше даже были специальные программы &#8212; &#171;Whats new агенты&#187;. Погуглил, в топе выдачи ничего не нашел. Вероятно, из-за засилия динамически генерируемых сайтов, эти программы если не вымерли, а ушли на второй план.</p>
<p>Ну нет, так нет, в конце концов Perl не просто так изобрели. Обожаю Perl:</p>
<pre>#!/usr/bin/perl

my @url = (
        "<a href="http://mikhail.krivyy.com/">http://mikhail.krivyy.com/</a>",
        "<a href="http://www.novgorod.ru/">http://www.novgorod.ru/</a>",
        );

system("mv data.md5 data.old");

open(FILE,"&gt;data.md5");
foreach (@url) {print FILE $_."\t".(`fetch -q -o - $_ | md5 -q`);}
close(FILE);

print `diff data.md5 data.old`;
</pre>
<p>Все это в crontab и все :)</p>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2008/09/30/web-site-update-check-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Использование syslog для логирования работы программ/скриптов</title>
		<link>http://mikhail.krivyy.com/2007/11/14/syslog/</link>
		<comments>http://mikhail.krivyy.com/2007/11/14/syslog/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 11:41:22 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Web программирование]]></category>
		<category><![CDATA[Интернет и сеть]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2007/11/14/syslog/</guid>
		<description><![CDATA[Очередной раз заглянув в почту и обнаружив очередную пачку писем от серверов решил положить этому конец. Упрощало задачу то что, большую часть писем генерируют мои собственные программы и скрипты, которые установлены на различных серверах. Большая часть этих сообщений не являются критичными. Например, «Невозможно соединится с сервером», «Обработано файлов столько-то», «Затрачено времени столько-то» и т.п.  Я [...]]]></description>
			<content:encoded><![CDATA[<p>Очередной раз заглянув в почту и обнаружив очередную пачку писем от серверов решил положить этому конец. Упрощало задачу то что, большую часть писем генерируют мои собственные программы и скрипты, которые установлены на различных серверах.</p>
<p>Большая часть этих сообщений не являются критичными. Например, «Невозможно соединится с сервером», «Обработано файлов столько-то», «Затрачено времени столько-то» и т.п.  Я рассмотрел два основных варианта этой проблемы:</p>
<p><span id="more-637"></span></p>
<p><strong>Первый вариант, в лоб </strong>— использовать перенаправление вывода или собственные лог-файлы. Этот вариант не удобен для мониторинга, так как придётся просматривать больше количество файлов отчётов.</p>
<p><strong>Второй вариант</strong> — не изобретать велосипед и использовать <em><strong>syslog</strong></em>.</p>
<blockquote>
<p style="margin-bottom: 0cm"><strong>syslog</strong> &#8212; стандарт отправки сообщений о происходящих в системе событиях (логов), использующийся в компьютерных сетях, работающих по протоколу IP.</p>
<p style="margin-bottom: 0cm">Протокол <strong>syslog</strong> прост: отправитель посылает короткое текстовое сообщение, размером меньше 1024 байт получателю сообщения. Получатель при этом носит имя «<strong>syslogd</strong>», «<strong>syslog daemon</strong>», либо же, «<strong>syslog server</strong>». Сообщения могут отправляться как по UDP, так и по TCP. Как правило, такое сообщение отсылается в открытом виде.</p>
<p style="margin-bottom: 0cm"><strong>Syslog</strong> используется для удобства администрирования и обеспечения информационной безопасности. Он реализован под множество платформ и используется в множестве устройств. Поэтому, использование <strong>syslog</strong> позволяет обеспечить сбор информации с разных мест и хранение её в едином репозитории.</p>
</blockquote>
<p style="margin-bottom: 0cm">Как правило <strong>syslog</strong> и <strong>syslogd</strong> работают внутри одного сервера (то есть все соединения локальны) и никакой внешней сетевой деятельности не производится.</p>
<p style="margin-bottom: 0cm"><strong>Теперь, как все это выглядит на практике.</strong></p>
<p style="margin-bottom: 0cm"><strong>Perl:</strong></p>
<pre style="margin-bottom: 0cm">use Sys::Syslog;
openlog("имя вашей программы", "ndelay,pid", "local0");
syslog(LOG_WARNING, "Программа запущена");
...
# тут программа
...
syslog(LOG_WARNING, "Программа завершила выполнение");
closelog();</pre>
<p style="margin-bottom: 0cm"><strong>PHP:</strong></p>
<pre style="margin-bottom: 0cm">openlog("имя вашей программы", LOG_PID | LOG_PERROR, LOG_LOCAL0);
syslog(LOG_WARNING,"Программа запущена");
...
// тут программа
...
syslog(LOG_WARNING, "Программа завершила выполнение");
closelog();</pre>
<p style="margin-bottom: 0cm"><strong>C/C++:</strong></p>
<pre style="margin-bottom: 0cm">#include &lt;syslog.h&gt;
openlog("имя вашей программы", 0, LOG_USER);
syslog(LOG_NOTICE, "Can not open file \"%s\" for writing.",filename);
closelog();</pre>
<p style="margin-bottom: 0cm">Далее можете поискать ваши сообщения в журналах <strong>syslog</strong>. Тут все зависит от настроек <strong>syslogd</strong>. Обычно это /var/log/messages.</p>
<p style="margin-bottom: 0cm">В документации PHP написано, что в windows тоже работает, но я не пробовал.</p>
<p style="margin-bottom: 0cm">Подробнее о флагах и значениях можно прочитать в руководствах:</p>
<ul>
<li>
<p style="margin-bottom: 0cm">C &#8212; <a href="http://linux.die.net/man/3/syslog">http://linux.die.net/man/3/syslog</a></p>
</li>
<li>
<p style="margin-bottom: 0cm">PHP &#8212; <a href="http://www.php.net/syslog"><font color="#000080">http://www.php.net/syslog</font></a></p>
</li>
<li>
<p style="margin-bottom: 0cm">Perl &#8212; <a href="http://perldoc.perl.org/Sys/Syslog.html">http://perldoc.perl.org/Sys/Syslog.html</a></p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2007/11/14/syslog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Администрирование компьютерного класса</title>
		<link>http://mikhail.krivyy.com/2003/05/14/computers-class/</link>
		<comments>http://mikhail.krivyy.com/2003/05/14/computers-class/#comments</comments>
		<pubDate>Wed, 14 May 2003 12:44:22 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Интернет и сеть]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2003/05/14/computers-class/</guid>
		<description><![CDATA[Опять попросили написать. :) Простая программка для администрирования компьютерного класса. Написана на Delphi. Доводить до ума времени нет, да и желания писать на Delphi тоже нет никакого, по этому выкладываю с исходниками. Программа состоит из двух частей устанавливаемых на сервере и клиентах соответственно. Администратор может добавлять компьютеры, назначать им время, добавлять время, сбрасывать его. Все [...]]]></description>
			<content:encoded><![CDATA[<p>Опять попросили написать. :) Простая программка для администрирования компьютерного класса. Написана на Delphi. Доводить до ума времени нет, да и желания писать на Delphi тоже нет никакого, по этому выкладываю с исходниками. </p>
<p><center><img src="http://mikhail.krivyy.com/wp-content/uploads/2006/10/cclass.gif"/></center></p>
<p><span id="more-170"></span></p>
<p>Программа состоит из двух частей устанавливаемых на сервере и клиентах соответственно. Администратор может добавлять компьютеры, назначать им время, добавлять время, сбрасывать его. Все действия записываются в Log файл.</p>
<ul>
<li>Скачать <a href="http://mikhail.krivyy.com/wp-content/uploads/2006/10/cclass.zip">программу</a>
</li>
<li>Скачать <a href="http://mikhail.krivyy.com/wp-content/uploads/2006/10/cclass_src.zip">исходники</a>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2003/05/14/computers-class/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Аналог PHP-шного AddSlashes() на С++</title>
		<link>http://mikhail.krivyy.com/2003/04/17/add-slashes-c/</link>
		<comments>http://mikhail.krivyy.com/2003/04/17/add-slashes-c/#comments</comments>
		<pubDate>Thu, 17 Apr 2003 12:41:47 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Интернет и сеть]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2003/04/17/add-slashes-c/</guid>
		<description><![CDATA[Попросили написать &#8212; не вопрос :) #include &#60;stdlib.h&#62; #include &#60;stdio.h&#62; #include &#60;string.h&#62; &#160; char * AddSlashes(char* str) { char *s=str; int old_len=strlen(str); int len=0; while (*s) { if (*s=='\'' &#124;&#124; *s=='&#34;') len+=2; else len++; s++; } char *newstr=(char*)malloc(len+1); char *ns=newstr; s=str; &#160; while (*s) { if (*s=='\'' &#124;&#124; *s=='&#34;') { *ns='\\';ns++; } *ns=*s;ns++;s++; } *ns=0; [...]]]></description>
			<content:encoded><![CDATA[<p>Попросили написать &#8212; не вопрос :)</p>
<p><span id="more-166"></span></p>
<ol class="codelist">
<li class="tab0 odd"><code>#include &lt;stdlib.h&gt;</code></li>
<li class="tab0 even"><code>#include &lt;stdio.h&gt;</code></li>
<li class="tab0 odd"><code>#include &lt;string.h&gt;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>char * AddSlashes(char* str) {</code></li>
<li class="tab1 even"><code>char *s=str;</code></li>
<li class="tab1 odd"><code>int old_len=strlen(str);</code></li>
<li class="tab1 even"><code>int len=0;</code></li>
<li class="tab1 odd"><code>while (*s) {</code></li>
<li class="tab2 even"><code>if (*s=='\'' || *s=='&quot;') len+=2; else len++;</code></li>
<li class="tab2 odd"><code>s++;</code></li>
<li class="tab2 even"><code>}</code></li>
<li class="tab1 odd"><code>char *newstr=(char*)malloc(len+1);</code></li>
<li class="tab1 even"><code>char *ns=newstr;</code></li>
<li class="tab1 odd"><code>s=str;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>while (*s) {</code></li>
<li class="tab2 even"><code>if (*s=='\'' || *s=='&quot;') {</code></li>
<li class="tab3 odd"><code>*ns='\\';ns++;</code></li>
<li class="tab3 even"><code>}</code></li>
<li class="tab2 odd"><code>*ns=*s;ns++;s++;</code></li>
<li class="tab2 even"><code>}</code></li>
<li class="tab1 odd"><code>*ns=0;</code></li>
<li class="tab1 even"><code>return(newstr);</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>void main(void) {</code></li>
<li class="tab1 even"><code>char *s=AddSlashes(&quot;привет 'это тест' \&quot;это тесто\&quot;&quot;);</code></li>
<li class="tab1 odd"><code>printf(&quot;%s&quot;,s);</code></li>
<li class="tab1 even"><code>free(s);</code></li>
<li class="tab1 odd"><code>}</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/addslashes.cpp">addslashes.cpp</a></li>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2003/04/17/add-slashes-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пример работы с сокетами для Windows</title>
		<link>http://mikhail.krivyy.com/2002/12/19/using-sockets-windows/</link>
		<comments>http://mikhail.krivyy.com/2002/12/19/using-sockets-windows/#comments</comments>
		<pubDate>Thu, 19 Dec 2002 12:47:24 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Интернет и сеть]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2002/12/19/using-sockets-windows/</guid>
		<description><![CDATA[Писал, когда сам разбирался с этим делом. На базе этого простого примера написано (точнее не совсем на его базе, а скорее при его участии) пара серьезных программок. Все просто, как в танке. По исходникам разберетесь. makefile all: socket.cpp config.h socket.h $(CC) socket.cpp Download this code: makefile.txt socket.cpp #include &#34;stdio.h&#34;; #include &#34;socket.h&#34;; #include &#34;config.h&#34;; &#160; static [...]]]></description>
			<content:encoded><![CDATA[<p>Писал, когда сам разбирался с этим делом. На базе этого<br />
простого примера написано (точнее не совсем на его<br />
базе, а скорее при его участии) пара серьезных<br />
программок. </p>
<p>Все просто, как в танке. По исходникам разберетесь. </p>
<p><span id="more-175"></span></p>
<h2>makefile</h2>
<ol class="codelist">
<li class="tab0 odd"><code>all: socket.cpp config.h socket.h</code></li>
<li class="tab1 even"><code>$(CC) socket.cpp</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/makefile.txt">makefile.txt</a></li>
<h2>socket.cpp</h2>
<ol class="codelist">
<li class="tab0 odd"><code>#include &quot;stdio.h&quot;;</code></li>
<li class="tab0 even"><code>#include &quot;socket.h&quot;;</code></li>
<li class="tab0 odd"><code>#include &quot;config.h&quot;;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>static char Rec[2048000];</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>bool SendString(SOCKET s,char* str) {</code></li>
<li class="tab1 even"><code>int cnt=send(s,str,strlen(str),0);</code></li>
<li class="tab1 odd"><code>if (cnt==SOCKET_ERROR) return(false); else return(true);</code></li>
<li class="tab1 even"><code>}</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>char* GetString(SOCKET s) {</code></li>
<li class="tab1 odd"><code>char *str;</code></li>
<li class="tab1 even"><code>char InBuff[2048];</code></li>
<li class="tab1 odd"><code>int cnt;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>strcpy(&quot;&quot;,Rec);</code></li>
<li class="tab1 even"><code>while (cnt!=0) {</code></li>
<li class="tab2 odd"><code>memset(&amp;InBuff,0,2048);</code></li>
<li class="tab5 even"><code>cnt=recv (s, (char*)&amp;InBuff, sizeof(InBuff),0);</code></li>
<li class="tab2 odd"><code>strcat(Rec,InBuff);</code></li>
<li class="tab2 even"><code>}</code></li>
<li class="tab1 odd"><code>return((char*)&amp;Rec);</code></li>
<li class="tab1 even"><code>}</code></li>
<li class="odd">&nbsp;</li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>int OpenURL(char *url) {</code></li>
<li class="tab1 even"><code>char *none=&quot;&quot;;</code></li>
<li class="tab1 odd"><code>char query[2048];</code></li>
<li class="tab1 even"><code>struct sockaddr_in ssin;</code></li>
<li class="tab1 odd"><code>struct hostent* hp;</code></li>
<li class="tab1 even"><code>unsigned char strHlp[2048], *pch;</code></li>
<li class="tab1 odd"><code>int PortNum;</code></li>
<li class="tab1 even"><code>char *http_host;</code></li>
<li class="tab1 odd"><code>char *http_path;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>if (memcmp(url,&quot;HTTP://&quot;,7)!=0 &amp;&amp; memcmp(url,&quot;http://&quot;,7)!=0) return(7);</code></li>
<li class="tab1 even"><code>url+=7;</code></li>
<li class="tab1 odd"><code>if (WSAStartup(MAKEWORD(1,1),&amp;lpWSAData)!=0) return(1);</code></li>
<li class="tab1 even"><code>// ЁбЇ®«м§гЉ¬ Default'®ўл© ­®¬Ља Ї®ав  - 80, Љб«Ё ­Љ § ¤ ­ ¤агЈ®©</code></li>
<li class="tab1 odd"><code>strcpy(strHlp,url);</code></li>
<li class="tab1 even"><code>pch = strchr((char*)strHlp,':');</code></li>
<li class="tab1 odd"><code>if (pch==NULL) {</code></li>
<li class="tab2 even"><code>PortNum = 80;</code></li>
<li class="tab2 odd"><code>pch = strchr((char*)strHlp,'/');</code></li>
<li class="tab2 even"><code>if (pch!=NULL) {</code></li>
<li class="tab3 odd"><code>pch[0] = '\0';</code></li>
<li class="tab3 even"><code>http_path=pch+1;</code></li>
<li class="tab3 odd"><code>}</code></li>
<li class="tab2 even"><code>else {</code></li>
<li class="tab3 odd"><code>http_path=none;</code></li>
<li class="tab3 even"><code>}</code></li>
<li class="tab2 odd"><code>}</code></li>
<li class="tab1 even"><code>else {</code></li>
<li class="tab2 odd"><code>pch[0] = '\0';</code></li>
<li class="tab2 even"><code>pch++;</code></li>
<li class="tab2 odd"><code>char *pch1 = strchr((char*)pch,'/');</code></li>
<li class="tab2 even"><code>if (pch1!=NULL) {</code></li>
<li class="tab3 odd"><code>pch1[0] = '\0';</code></li>
<li class="tab3 even"><code>http_path=pch1+1;</code></li>
<li class="tab3 odd"><code>}</code></li>
<li class="tab2 even"><code>else {</code></li>
<li class="tab3 odd"><code>http_path=none;</code></li>
<li class="tab3 even"><code>}</code></li>
<li class="tab2 odd"><code>PortNum = atoi(pch);</code></li>
<li class="tab2 even"><code>if(PortNum==0) PortNum = 80;</code></li>
<li class="tab2 odd"><code>}</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>// Џ®гз Љ¬ IP Ї® Ё¬Љ­Ё</code></li>
<li class="tab1 even"><code>if ((hp=gethostbyname(strHlp))==NULL) return(1);</code></li>
<li class="tab1 odd"><code>http_host=strHlp;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>memset ((char *)&amp;ssin, 0, sizeof(ssin));</code></li>
<li class="tab1 even"><code>ssin.sin_family = AF_INET;</code></li>
<li class="tab1 odd"><code>ssin.sin_addr.s_addr = htonl(INADDR_ANY);</code></li>
<li class="tab1 even"><code>ssin.sin_port = 0;</code></li>
<li class="tab1 odd"><code>bind (s, (struct sockaddr *)&amp;ssin, sizeof(ssin));</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>s=socket(AF_INET, SOCK_STREAM, 0);</code></li>
<li class="tab1 even"><code>if (s==INVALID_SOCKET) return(4);</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>ssin.sin_family = AF_INET;</code></li>
<li class="tab1 odd"><code>ssin.sin_addr.S_un.S_un_b.s_b1 = hp-&gt;h_addr[0];</code></li>
<li class="tab1 even"><code>ssin.sin_addr.S_un.S_un_b.s_b2 = hp-&gt;h_addr[1];</code></li>
<li class="tab1 odd"><code>ssin.sin_addr.S_un.S_un_b.s_b3 = hp-&gt;h_addr[2];</code></li>
<li class="tab1 even"><code>ssin.sin_addr.S_un.S_un_b.s_b4 = hp-&gt;h_addr[3];</code></li>
<li class="tab1 odd"><code>ssin.sin_port = htons(PortNum);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>printf(&quot;Conecting to %d.%d.%d.%d...&quot;,(unsigned char)hp-&gt;h_addr[0],(unsigned char)hp-&gt;h_addr[1],(unsigned char)hp-&gt;h_addr[2],(unsigned char)hp-&gt;h_addr[3]);</code></li>
<li class="tab1 even"><code>if (connect(s, (sockaddr *)&amp;ssin, sizeof(ssin))==-1) return(3);</code></li>
<li class="tab1 odd"><code>printf(&quot;Ok\n&quot;);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>strcpy(query,&quot;GET /&quot;);</code></li>
<li class="tab1 even"><code>strcat(query,http_path);</code></li>
<li class="tab1 odd"><code>strcat(query,&quot; HTTP/1.0\nHost: &quot;);</code></li>
<li class="tab1 even"><code>strcat(query,http_host);</code></li>
<li class="tab1 odd"><code>strcat(query,&quot;\nUser-agent: &quot;);</code></li>
<li class="tab1 even"><code>strcat(query,http_user_agent);</code></li>
<li class="tab1 odd"><code>strcat(query,&quot;\nAccept: */*\n\n&quot;);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>printf(&quot;%s&quot;,query);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>if (!SendString(s,query)) return(5);</code></li>
<li class="tab1 even"><code>char* str=GetString(s);</code></li>
<li class="tab1 odd"><code>printf(&quot;%s&quot;,str);</code></li>
<li class="tab1 even"><code>return(0);</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>void CloseURL(void) {</code></li>
<li class="tab1 even"><code>WSACleanup();</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>void main(void) {</code></li>
<li class="tab1 even"><code>int err=OpenURL(&quot;http://www.codenet.ru/&quot;);</code></li>
<li class="tab1 odd"><code>if (err!=0) {</code></li>
<li class="tab2 even"><code>printf(&quot;Error #%d: WSABASEERR+%d\n&quot;,err,WSAGetLastError()-WSABASEERR);</code></li>
<li class="tab2 odd"><code>}</code></li>
<li class="tab1 even"><code>}</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/socket.cpp">socket.cpp</a></li>
<h2>config.h</h2>
<p>Этот модуль содержит настройки&#8230;точнее одну настройку &#8212; то что сервер получит<br />
в качестве HTTP_USER_AGENT. </p>
<ol class="codelist">
<li class="tab0 odd"><code>char *http_user_agent=&quot;Search Engine&quot;;</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/config.h">config.h</a></li>
<h2>socket.h</h2>
<ol class="codelist">
<li class="tab0 odd"><code>#include &lt;windows.h&gt;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>int s;</code></li>
<li class="tab0 even"><code>WSADATA lpWSAData;</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/socket.h">socket.h</a></li>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2002/12/19/using-sockets-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

