Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.229.253] |
|
Сообщ.
#1
,
|
|
|
Не раз уже задавался вопрос про использование 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». Вообщем это все!!! Небольшой пример прилагается. Если что спрашивайте – может отвечу =) Прикреплённый файлzIRC.ace (6.86 Кбайт, скачиваний: 368) |
Сообщ.
#2
,
|
|
|
M Тема перенесена из Delphi -> Delphi: Общие вопросы. |