<?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=53816&amp;view=findpost&amp;p=355978</guid>
        <pubDate>Tue, 11 May 2004 14:21:00 +0000</pubDate>
        <title>Пример программирования обращения к IRC</title>
        <link>https://forum.sources.ru/index.php?showtopic=53816&amp;view=findpost&amp;p=355978</link>
        <description><![CDATA[Song: <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body">Тема перенесена из Delphi -> <a href='http&#58;//forum.sources.ru/index.php?showforum=11'>Delphi&#58; Общие вопросы.</a></div></div>]]></description>
        <author>Song</author>
        <category>Интернет, сети, протоколы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=53816&amp;view=findpost&amp;p=355864</guid>
        <pubDate>Tue, 11 May 2004 11:49:45 +0000</pubDate>
        <title>Пример программирования обращения к IRC</title>
        <link>https://forum.sources.ru/index.php?showtopic=53816&amp;view=findpost&amp;p=355864</link>
        <description><![CDATA[x2er0: Не раз уже задавался вопрос про использование MIRC&#39;а... <br>
Вот и решил показать простейший пример использования и программирования IRC протокола.<br>
Написание прод этот протокол абсолютно ничем не отличается от написания под все (т.е. почти все) др. сетевые протоколы...<br>
Так же быдет показан простейши пример: конект к серверу, ответ на запрос ирк сервера, возможность<br>
посылать фразы в канал....<br>
Для начала неплохо было бы скачать rfc 1459 для (Internet Relay Chat Protocol).<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">type</div><div class="code_line">&nbsp;&nbsp;TsInfo = record</div><div class="code_line">&nbsp;&nbsp; &nbsp;sIP &nbsp; &nbsp; &nbsp; : String[20];</div><div class="code_line">&nbsp;&nbsp; &nbsp;sChan &nbsp;: String[10];</div><div class="code_line">&nbsp;&nbsp; &nbsp;sNick &nbsp; : String[10];</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Все поля будут заполнятся из введеных пользователем строк в Edit&#39;ы.<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;Info.sIP &nbsp; := Edit1.Text; //ИП адрес сервера</div><div class="code_line">&nbsp;&nbsp;Info.sChan := Edit2.Text; //канал на который будем заходить</div><div class="code_line">&nbsp;&nbsp;Info.sNick := Edit3.Text; //наш ник</div></ol></div></div></div></div><br>
<br>
Так… все что необходимо мы уже имеем. (Все это я тестировал у себя в локалке&#33;&#33;&#33; Так что и у вас должно работать =()<br>
<br>
Теперь, первое, что нам необходимо, это, собственно, приконекатся к серверу. В примере я использовал стандартный компонент TClientSocket (я обозвал его «cs»).<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">cs.Address := Info.sIP;</div><div class="code_line">cs.Port &nbsp; &nbsp;:= 6667; //выбираем стандартный порт (у вас может быть другой)</div></ol></div></div></div></div><br>
<br>
Ну и далее, стандартное для TClientSocket соединение <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">cs.Active := TRUE;</div></ol></div></div></div></div><br>
<br>
Все, если все ок, то мы должны присоеденится. Далее мы хотели зайти на канал – попробуем сделать это&#33;<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">OnConnect: begin</div><div class="code_line">&nbsp;cs.Socket.SendText(&#39;NICK&#39; + &#39; &#39; + Info.sNick + #13#10);</div><div class="code_line">&nbsp;cs.Socket.SendText(&#39;USER&#39; + &#39; &#39; + Info.sNick + &#39; &#39; + &#39;test&#39; + &#39; test&#39; + &#39;test&#39; + #13#10);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Все необходимые команды берутся из выше указанного rfc.<br>
<br>
Но нельзя пропустить то обстоятельство, что сервер постоянно проверяет вашего клиента на «валидность», используя при этом команду «PING ‘rnd строка’», нам же в этом случае необходимо будет ответить на этот запрос, примерно так «PONG ‘rdn строка’». После этого мы должны стать «своими» на сервере&#33; Пробудем:<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">OnRead:</div><div class="code_line">begin</div><div class="code_line">&nbsp;sText := cs.Socket.ReceiveText;</div><div class="code_line">&nbsp;tmp := copy(sText, 1, 4);</div><div class="code_line">&nbsp;if (tmp = &#39;PING&#39;) then begin</div><div class="code_line">&nbsp;&nbsp;tmp := &#39; &#39;; tmp := copy(sText, pos(&#39; &#39;, sText)+2, length(sText)-6);</div><div class="code_line">&nbsp;&nbsp;cs.Socket.SendText(&#39;PONG&#39; + &#39; &#39; + tmp + #13#10);</div><div class="code_line">&nbsp;&nbsp;cs.Socket.SendText(&#39;JOIN&#39; + &#39; #&#39; + Info.sChan + #13#10);</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;Memo1.Lines.Add(sText)</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
Тут же <strong class='tag-b'>( cs.Socket.SendText(&#39;JOIN&#39; + &#39; #&#39; + Info.sChan + #13#10);<br>
)</strong> мы заходим на канал <strong class='tag-b'>Info.sChan</strong>, замечу, что перед именем канала должен стоять символ <strong class='tag-b'>«#»</strong>.<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">OnClick:</div><div class="code_line">cs.Socket.SendText(&#39;PRIVMSG #&#39; + Info.sChan + &#39; :&#39; + Edit4.Text + #13#10);</div></ol></div></div></div></div><br>
После этого текст из Edit4 должен попасть на канал sChan, за отсылку сообщений ответственна команда «PRIVMSG».<br>
<br>
Вообщем это все&#33;&#33;&#33; Небольшой пример прилагается. Если что спрашивайте – может отвечу =)]]></description>
        <author>x2er0</author>
        <category>Интернет, сети, протоколы</category>
      </item>
	
      </channel>
      </rss>
	