电脑技术学习

QQ.NET 第一个预览版源码文档下载

dn001
  很兴奋能得到这么多人的支持,这也足于说明大家对于这个开发包也是期盼已久的。有人提醒我注意版权问题,也提到了QQ.NET这个名称是否合适。说真的了,涉及法律这方面的问题我也不是特别了解,毕竟这与珊瑚虫QQ本质上还是很大不同的,我们没有与QQ软件有什么直接的关系,只是通过发布相同的协议包到他们服务器并接受回馈的信息,其它与腾讯公司的软件也没有很大的关系。在这里还希望对这知识产权法律比较熟悉的朋友能给一些建议。

  不过,在这里,为了感谢这么多支持和期待的朋友,我还是第一时间发布一个预览版吧。在这个版本中,已经实现了QQ的一些基本功能,包括:

1. 登录:
;;;使用QQ号码和密码进行登录,在LumaQQ中不支持Email登录的。
2. 保持连接与登录状态:
;;;如果长时间没有向服务器发布保持连接包,QQ服务器会认为你已经下线。所以每隔一段时间(2分钟)会向服务器发送保持连接包,同时也有一个功能就是保持本地的Socket对象处理连接状态,断线了则自动重新建立连接
3. 接收信息
;;;可以接受来好友或陌生人的信息,但还没有测试能否接收来自网页的临时信息。此项功能也在计划中,因为做QQ机器人还是很需要这个功能的。
4. 发送信息
;;;可以向好友或陌生人回复(发送)信息。
5. 读取QQ好友
;;;可以从服务器读取好友列表(但没有分组信息,读取好友分组是另一个命令)
6. 读取在线好友
;;;可以读取当前在线的好友列表(只是好友QQ和一些状态相关的属性)
7. 读取QQ详细信息
;;;可以根据QQ号码根据该QQ的详细信息(包括自己)
8. 修改登录状态
;;;可以将自己的登录状态修改为隐身或其它状态
9. 接收到状态改变
;;;当一个好友的状态发生改变后,会接收到系统这样的一个通知。
; 10. 接收系统信息
;;;可以接收来自QQ服务器的系统消息,包括广告,好友添加申请等等。
; 11. 处理好友添加申请
;;;当你的帐号设置为需要验证时,会通过系统信息得到好友的验证申请,使用这个功能你可以处理验证申请(接受或拒绝)
; 12. 删除好友(未验证)
;;;通过这个功能你可以删除一位好友。
; 13. 把自己从好友列表中删除(未验证)
;;;通过这个功能你可以把自己从好友列表中删除(是不是黑名单功能?)
; 14. 添加好友和发布验证信息(有点问题)
;;;通过这个功能可以添加好友,在好友设置为需要添加验证时,会有相应的事件,在这个事件中我们可以发送验证请求。但是不知道什么原因,这个功能却很难通过。 首先是发送添加申请的那个包经过没有收到回复,偶尔成功过,但是发送验证请求却不成功。我试了很多遍,极少数情况下可以,使用LumaQQ也经常这种情 况,但是它成功的机会还是比较多。包协议本身可以确认应该是没有问题的。有空再好好测试一下。

  目前就是这么多功能,不过对于只是想开发QQ机器人的朋友来说,这些功能应该是够用了。我今天也特意测试了一些稳定性,结果还是比较满意的,我使用的是代理上网,而且网络情况也不是很稳定。连接在线已经6个小时了,目前依然在线,没有出现什么问题。

  回到QQ.NET使用本身,如果你是直接上网,那么只需要下面这段代码即可登录:

QQUser user = new QQUser(****, "****");
QQ.NET.QQClIEnt client = new QQ.NET.QQClient(user);
user.IsUdp = true;
client.LoginServerHost = "219.133.62.8"
client.Login();

  而如果你代理,则需要设置一下代理服务器地址。注意:目前只需要两个登录方式,如果你直接上网你只能使用UDP登录;如果使用代理上网,那么你就只能使用TCP登录(IsUdp = false)。smile_sad暂时先忍一下吧。

  接口方面,因为QQ本身的功能有很多,我没有像LumaQQ那样把所有的功能都定义在QQClient里面,而是将不同的功能包装到不同的类里面,比如连接 功能有ConnectionManager,包发送和处理有PacketManager,而好友处理则放在FriendManager里面等等。这样分别 包装一下,应该可以大大方便大家的使用。

  在QQ事件方面,每一个QQ事件参数都会有InputPacket和OutPacket两个属 性,分别表示收到此包和对应的发送包。在有的情况下,可能只有接收包,而没有发送包。因为有的输入包是由服务器主动发送给我们的,比如好友消息和系统消 息。所以要正确区分这两个属性的不同之处。

  在包的处理方面,收到包的处理和包的重复发送功能我使用了ThreadPool,而不是 Timer。这让我们更容易控制这些功能的运行时机,改天有时间我会专门介绍这个功能。另外就是超时包,超时包并不是真的网络发送时超时,而是在一个包发 出去后,在一段时间内没有收到QQ服务器的反馈,会再次发送,当发送次数达到一定数量时,就会触发超时事件,不再重复发送。

  这个版本按微软的软件发布阶段来定义的话,相当于第一个CTP阶段。主要是想让大家与我一同测试,找出潜在的BUG,找到改进的办法,所以非常欢迎大家提出各建议。

  祝大家使用愉快,smile_regular

  源码和文档下载
  http://qqnet.googlecode.com/svn/trunk/