Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Пример программирования обращения к IRC

01.01.2007

Не раз уже задавался вопрос про использование MIRC'а...
Вот и решил показать простейший пример использования и программирования IRC протокола.
Написание прод этот протокол абсолютно ничем не отличается от написания под все (т.е. почти все) др. сетевые протоколы...
Так же быдет показан простейши пример: конект к серверу, ответ на запрос ирк сервера, возможность
посылать фразы в канал....
Для начала неплохо было бы скачать rfc 1459 для (Internet Relay Chat Protocol).
Начнем...

Заведем нужную структуру с необходимой нам информацией. Она может выглядеть примерно так:

type
  TsInfo = record
    sIP       : String[20];
    sChan  : String[10];
    sNick   : String[10];
  end;
 

Все поля будут заполнятся из введеных пользователем строк в Edit'ы.

  Info.sIP   := Edit1.Text; //ИП адрес сервера
  Info.sChan := Edit2.Text; //канал на который будем заходить
  Info.sNick := Edit3.Text; //наш ник

 
Так… все что необходимо мы уже имеем. (Все это я тестировал у себя в локалке!!! Так что и у вас должно работать =()
 
Теперь, первое, что нам необходимо, это, собственно, приконекатся к серверу. В примере я использовал стандартный компонент TClientSocket (я обозвал его «cs»).

Заполним необходимые для соединения данные:

cs.Address := Info.sIP;
cs.Port    := 6667; //выбираем стандартный порт (у вас может быть другой)

Ну и далее, стандартное для TClientSocket соединение

 

cs.Active := TRUE;

 

Все, если все ок, то мы должны присоеденится. Далее мы хотели зайти на канал – попробуем сделать это!

OnConnect: begin
 cs.Socket.SendText('NICK' + ' ' + Info.sNick + #13#10);
 cs.Socket.SendText('USER' + ' ' + Info.sNick + ' ' + 'test' + ' test' + 'test' + #13#10);
end;

Все необходимые команды берутся из выше указанного rfc.
 

Но нельзя пропустить то обстоятельство, что сервер постоянно проверяет вашего клиента на «валидность», используя при этом команду «PING ‘rnd строка’», нам же в этом случае необходимо будет ответить на этот запрос, примерно так «PONG ‘rdn строка’». После этого мы должны стать «своими» на сервере! Пробудем:

OnRead:

begin
 sText := cs.Socket.ReceiveText;
 tmp := copy(sText, 1, 4);
 if (tmp = 'PING') then begin
  tmp := ' '; tmp := copy(sText, pos(' ', sText)+2, length(sText)-6);
  cs.Socket.SendText('PONG' + ' ' + tmp + #13#10);
  cs.Socket.SendText('JOIN' + ' #' + Info.sChan + #13#10);
 end;
 Memo1.Lines.Add(sText)
end;

Тут же ( cs.Socket.SendText('JOIN' + ' #' + Info.sChan + #13#10);
) мы заходим на канал Info.sChan, замечу, что перед именем канала должен стоять символ «#».
 

Вот почти и все, осталось сделать возможность отсылать сообщения.

OnClick:

cs.Socket.SendText('PRIVMSG #' + Info.sChan + ' :' + Edit4.Text + #13#10);

 
После этого текст из Edit4 должен попасть на канал sChan, за отсылку сообщений ответственна команда «PRIVMSG».
 
 

Взято из https://forum.sources.ru

Автор: x2er0