求用Delphi实现IRC的简单功能的例程(200分)

  • 主题发起人 主题发起人 qixia
  • 开始时间 开始时间
Q

qixia

Unregistered / Unconfirmed
GUEST, unregistred user!
欲开发一IP to IP聊天软件,为确定对方是否上网,欲使用以下方法:
凡上网者自动连到某一IRC服务器,搜索指定Nickname,得到其IP。
“专研”了Internet Relay Chat Protocol后发现进度甚慢,(想不
到老外文采这么好,一个IRC协议写了洋洋洒洒140kb,十四万字,我
什么时候能有这水平,高考作文就不愁了。)

现求:用Delphi实现登陆IRC,并由此找nickname,取ip的例程。
要求能处理错误(如登陆时nickname已被占用等)要代码!
(嘿,是不是很懒?无奈我实在没有太多时间,功课紧啊)

望哪位大侠出刀相助,本人愿出二百大洋。
可以发妹儿到这个地址:<a href="mailto:qixia@sina.com?subject=aboutirc">qixia@sina.com</a>
 
我尝试与irc服务器连接,nick命令能够返回,可是user命令老是没有返回内容,其他命令又没有权限,不知道是什么原因。
我的irc协议只有23.3k,有140k的请发给我mailto:zcgly@263.net
thinks :)
 
user命令都没有成功,居然可以使用nick命令???

讲讲过程还可以,完整代码??? 每个人的时间都很值钱哦!
 
to cAkk:你说详细一点嘛
 
to cakk:那就讲讲过程吧,最好具体点
 
你所指的irc server是你可以控制的吗?
如果是的话,你不一定要用irc protocal,你可以自定义protocal,并作为server
所有的client在上网后就尝试连接指定的服务器端口,并取得friends list & bad
list ...你认为如何?
 
我要的是特定的IRC如 南京石头城,首都在线等
 
随便说说,我一年以前做过一个东西实现这个功能的.不过我的程序是完全通过IRC
通讯的,没有单独建立连接.

其实你只要好好看看IRC的协议就什么都清楚了,不过我想你可能和我一样懒. :-)
下面是我的方法,我不敢说只有这样才正确,我只能说:我这样做成功了.

首先我们假设:
1.我的NickName是cAkk,email是www.163.net
2.对方NickName是qixia
3.IRC服务器是: 202.96.137.64:6667 (深圳浪子)

首先我们需要连接到服务器:
clientsocket.address:='202.96.137.64';
clientsocket.port:=6667;
clientsocket.open;

确认连接成功之后,发送登录信息:

NICK cAkk#13#10USER cAkk 163.net "10.0.0.29" :cAkk

(注意里面的回车换行符和空格)

现在检查qixia是否在IRC上面:
WHOIS qixia
也可以用定时器每隔一段时间查询一次:
ISON qixia

确认qixia在IRC里面后,给他发送你的IP地址
PRIVMSG qixia :qixia xxx.xxx.xxx.xxx (请将xxx换成你的地址)

最后是退出IRC:
QUIT :Leaving

发出命令后要等待服务器返回信息,一般信息由发送方名字开头,后面跟着用空格隔开的一
系列参数.一般第一个参数是命令字符串, 常见的命令字符串如下:

1.PING - 服务器测试你是否在线,赶快发送一个 PONG
2.512 - 你的nickname有密码保护, 发送 PASS your_password
3.PRIVMSG - 有人给你发消息,检查该消息是否以qixia开头,如是则说明是他发送的消息
4.311 - WHOIS命令的返回信息,如果第三个参数是qixia,说明他在IRC里面
5.303 - ISON命令的返回信息,如果第三个参数是 :qixia ,说明他在IRC里面

基本就这些了,估计我表达得不太清楚,如果有问题,你最好调试一下,看看返回的信息格式.
 
http://www2.he.cninfo.net/delphi/com/net/tirc.zip
TIrcClient
是做 TCP/IP RFC 1459 IRC Protocol 的非可视构件,但未 TIrcClient 支持
DCC protocol ( 1.3.01 beta 版,附源码 ),作者 : Greg Timmons。
 
to cakk:
最后一个细节:在我发送了"nick"命令后,何时发送"user"命令?
要知道,如果nick命令出错(如有重名),我会收到信息,但nick
正确的话,我不会收到任何的信息。如何判断?
 
我用另一个办法试验了一下,可以帮助你详细了解IRC协议:

用telnet连接IRC服务器,注意端口号一定要正确,
连接上之后,照我上面介绍的命令敲进去,看看server的返回来的是什么
(正确回应和错误提示)就知道了.
我已经试验了,效果不错,有几点需要注意:

1.首先一定要修改telnet的设置,把菜单"终端|首选|本地响应"打上勾.
2.注意你是通过telnet连接的,你所接受到的是最原始的信息,另外,你发送命令
也不用象在mIRC那样,不用加"/".
3.当你看到server发给你PING消息的时候,一定要及时返回一个PONG消息,
不然连接就被切断了;
4.先不要急着进入channle,因为进去后,你会接受到大量的消息,你会看不清
重要的内容;

最好是自己架一个IRC服务器,这样调试起来方便一些.这类IRC服务器程序
网上有很多.

有什么问题继续问我.
 
我就是这样调试的,但请再帮我回答我上面的问题。
(我还自已编了个telnet.exe呢!)^o*
 
那你就可以这样;
1.先注册一个nick,并且打开一个mIRC,用这个nick登录,
2,然后在telnet里面再次用这个nick登录,你就会看到这种情况下server会
返回什么信息,大概是什么"你的nick需要密码"之类的
3.输入密码:
PASS yourpassword
即可
 
to cakk:
我不是这个意思。我是说,在程序中,如何判断我的nick命令是否出错。
 
cakk快来答呀
 
你发送nick命令之后就等待返回信息,nick通过和没有通过返回的信息是不一样的,
你可以区别对待,至于具体返回信息有什么不一样,我不是说了吗? 你用telnet
试一试不就知道了?
 
后退
顶部