阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  158 随笔 :: 0 文章 :: 2109 评论 :: 67 引用

版权声明:该开源开发包,是基于LumaQQ的基于等价移植到.NET平台下,开发者不直接参与QQ协议的分析工作,移植到.NET平台纯粹是为了方便广大.NET开发者学习和研究之用,并且没有产生任何直接的经济效益,并且纯粹是个人的技术学习研究行为,与本人所在单位没有任何关系。此开发包的用户在使用过程产生的效益和涉及的法律责任与本人没有直接关系。如果影响到您或您的公司利益,敬请谅解并且与我联系,本人会第一时间作出处理。本系列章首发且单发于博客园,由于各种原因不欢迎转载本系列文章,如果您转载了该系列文章请自行承担责任并且转载完整版本,包括版权声明。

很兴奋能得到这么多人的支持,这也足于说明大家对于这个开发包也是期盼已久的。在这里,为了感谢这么多支持和期待的朋友,我还是第一时间发布一个预览版吧。在这个版本中,已经实现了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

源码和文档下载 (感谢DUDU提供的空间smile_regular)你也可以从SVN上下载最新代码。

补充:大家可以意见和建议发表到博客园LumaQQ.NET小组

阿不 http://hjf1223.cnblogs.com
Tag标签: lumaqq.net
posted on 2008-03-13 19:23 阿不 阅读(6834) 评论(114)  编辑 收藏 所属分类: OpenSourceLumaQQ.NET

评论

#1楼  2008-03-13 19:36 tommyk      
真的很好。。很强大
  回复  引用  查看    

#2楼  2008-03-13 19:38 yaosansi      
太帅了
  回复  引用  查看    

#3楼  2008-03-13 19:56 怪怪      
确实, 版权问题你得注意一下..., 比如干脆叫LumaQQ.NET之类,直接用QQ.NET, 嗯, 腾讯比较小心眼。 不过如果这个开发包影响大了让腾讯注意到, 以性质而论, 最多就是警告你一下。
  回复  引用  查看    

赞一个!
  回复  引用  查看    

#5楼  2008-03-13 20:10 被偷De贼      
速度很快呀.关注中...
  回复  引用  查看    

#6楼  2008-03-13 20:22 ou [未注册用户]
很错啊.支持.
  回复  引用    

#7楼  2008-03-13 20:23 飞雪尔 [未注册用户]
帮楼主想了个名字,叫做AQ.net(Aint-Q.net)。呵呵
  回复  引用    

#8楼  2008-03-13 20:33 JustDI      
阿不速度好快呀...虽然不是很懂,顶一个先..
  回复  引用  查看    

#9楼  2008-03-13 20:39 try      
恩,改个名字好些LumaQQ.NET比较好。一般java中开源转到net下都是加个net 如 lucene.net,ibatis.net
  回复  引用  查看    

#10楼  2008-03-13 20:43 帝之晓      
严重支持
有时间研究一下.
  回复  引用  查看    

#11楼  2008-03-13 20:46 老Q      
也可以叫 NLumaQQ
hoho,我还是习惯在 java包之前加N
  回复  引用  查看    

#12楼  2008-03-13 21:23 dudu      
阿不速度真快!
感谢阿不的分享!
  回复  引用  查看    

#13楼  2008-03-13 21:33 帝之晓      
这个不是用vs2005做的吗?
  回复  引用  查看    

#14楼  2008-03-13 21:36 阿不 [未注册用户]
确实要注意一下版权问题,不仅仅是一个名称的问题。
Miranda的QQ插件的开发一直受阻,应该也是和腾讯方面有些关系的。对于Miranda的插件而言,应该也是“通过发布相同的协议包到他们服务器并接受回馈的信息”而已的。
所以要小心。
  回复  引用    

#15楼  2008-03-13 21:41 lele_wangman      
谢谢分享
  回复  引用  查看    

#16楼  2008-03-13 21:58 阿凉 [未注册用户]
顶一下。。哪里有执行文件,先运行个试试。
  回复  引用    

#17楼  2008-03-13 22:03 xyz123 [未注册用户]
能够在局域中连接和接收信息吗?
  回复  引用    

#18楼  2008-03-13 22:04 Anytao      
强烈支持,有时间研究一下:-)
  回复  引用  查看    

#19楼  2008-03-13 22:10 gqzhao      
楼主,你这个产品影响一定会越来越大,加油!
  回复  引用  查看    

#20楼  2008-03-13 22:26 wsliu [未注册用户]
G:\DOTNET\DOTNET\QQ.NET\src\QQClient\bin\Debug>QQClient.cs.exe
连接丢失,无法发送包:包类型: Request_Login_Token 序号: 29332 时间:2008-3-13 22:
24:32
回车退出登录:

QQ退出成功!
  回复  引用    

#21楼  2008-03-13 22:26 fyes      
下载了半个小时.正在学习中.
需要的可用下面地址下载,原封不动的:
http://pfeng.cn/cnblogs/QQ.NET.rar

  回复  引用  查看    

#22楼  2008-03-13 22:53 stu_acer      
@怪怪

好奇的问问,你的文档是怎么生成的?完全跟MSDN里面风格一样,用什么工具呢?
  回复  引用  查看    

#23楼 [楼主] 2008-03-13 23:09 阿不      
@all
谢谢大家的支持,我没有时间一个一个回复还请见谅。
另外,关于版权和名称问题,看来是有必要再好好考虑考虑。
  回复  引用  查看    

#24楼  2008-03-13 23:09 lbq1221119      
cnQQ.Net
  回复  引用  查看    

#25楼 [楼主] 2008-03-13 23:11 阿不      
@ wsliu
应该是你的网络有什么问题吧,是不是有防火墙或是其它原因呢?
  回复  引用  查看    

#26楼 [楼主] 2008-03-13 23:12 阿不      
@fyes
谢谢你提供的下载地址,国外网站的访问确实会慢一点。
  回复  引用  查看    

#27楼  2008-03-13 23:17 Microshaoft      
QQKiller.net
Qiler.net
  回复  引用  查看    

#28楼  2008-03-13 23:19 没剑      
首先顶一下楼主,呵呵,精神可嘉啊~~~
qq.net这个怕会给QQ封杀啊~
不如叫fuckQQ.net?
哈哈,开个玩笑~
  回复  引用  查看    

#29楼 [楼主] 2008-03-13 23:53 阿不      
@ 帝之晓
这个为了方便写代码直接用2008了,不方便之处还请原谅。:(
但是程序集是可以在.NET2.0下运行的。
  回复  引用  查看    

#30楼 [楼主] 2008-03-13 23:54 阿不      
@ Microshaoft
要改名应该也会加LumaQQ.NET之类的。
  回复  引用  查看    

#31楼 [楼主] 2008-03-13 23:54 阿不      
@没剑
谢谢

  回复  引用  查看    

#32楼  2008-03-14 00:06 一抹微蓝      
很好很强大,学习+观注。
  回复  引用  查看    

#33楼  2008-03-14 00:54 wewe [未注册用户]
直接用到QQ这两个字母难保以后不出问题,改了吧,再说也没有觉得那个名字有什么好的
  回复  引用    

#34楼  2008-03-14 05:13 doodc [未注册用户]
严重支持!
关注中.........
  回复  引用    

#35楼  2008-03-14 08:01 生鱼片      
支持,期望博主后续
  回复  引用  查看    

#36楼  2008-03-14 08:34 朱少平      
很好很强大,坚决的顶.学习啦
  回复  引用  查看    

#37楼  2008-03-14 08:49 Charly      
很好很强大,学习学习。
  回复  引用  查看    

#38楼  2008-03-14 08:49 王孟军!      
GOD
  回复  引用  查看    

#39楼  2008-03-14 08:52 墙外行人      
支持,不错,
  回复  引用  查看    

#40楼  2008-03-14 08:53 风之影      
的确不错,很好很强大,
  回复  引用  查看    

#41楼  2008-03-14 08:54 tatung zhang      
下下来看看。。支持。。。
  回复  引用  查看    

#42楼  2008-03-14 09:00 状元      
不知道是谁把这个投到了cnbeta.com
支持一下
  回复  引用  查看    

#43楼  2008-03-14 09:01 netspider [未注册用户]
可以传送文件吗?这个是很多"开源QQ"的问题,通常是不知道协议,不知道你的QQ解决没有?
  回复  引用    

#44楼  2008-03-14 09:09 Such Cloud      
顶一个先

  回复  引用  查看    

#45楼  2008-03-14 09:12 一剑 [未注册用户]
支持开源
  回复  引用    

#46楼 [楼主] 2008-03-14 09:15 阿不      
@netspider
目前还没有传送文件的功能。你可以详细看一下上面的功能列表。
  回复  引用  查看    

#47楼  2008-03-14 09:21 kkun      
先顶后看
  回复  引用  查看    

#48楼  2008-03-14 09:26 丁 [未注册用户]
顶了 看看
  回复  引用    

#49楼  2008-03-14 09:26 kkun      
2008开发的啊,,还没下载呢,顶楼主的钻研精神的开源精神~
  回复  引用  查看    

#50楼  2008-03-14 09:29 mythzzdd [未注册用户]
呵呵是 2008的 2005下 看不了
  回复  引用    

#51楼 [楼主] 2008-03-14 09:30 阿不      
@mythzzdd
你可以直接下载使用程序集,程序集是基于.NET 2.0的
  回复  引用  查看    

#52楼  2008-03-14 09:30 StillWartersRunDeep      
支持了
  回复  引用  查看    

严重支持!
  回复  引用    

为什么你的Documentation.chm还是英文的.没有中文的帮助文档吗?
  回复  引用    

#55楼  2008-03-14 09:35 没剑      
楼主啊,发送文件的功能什么时候开发啊?
我觉得这个功能还是很不错的啊,可以做的东西就很多了啊
  回复  引用  查看    

阿不,你是不是“我不知道中文论坛”的那个阿不啊?
  回复  引用    

#57楼 [楼主] 2008-03-14 09:44 阿不      
@超级菜鸟不留名
不是,我没有去过那个论坛。
  回复  引用  查看    

#58楼 [楼主] 2008-03-14 09:44 阿不      
@没剑
尽量吧,因为文件传输要涉及比较多的网络编程的东西,所以还不知道能不能做的来呢。
  回复  引用  查看    

#59楼  2008-03-14 09:53 Midapex Village      
叫做‘MyQQ.NET',严重支持楼主!!
  回复  引用  查看    

#60楼 [楼主] 2008-03-14 09:53 阿不      
@ songhuanren
你再次从SVN下载就会有中文文档了,但是还是有一些会乱码。用户NDOC生成的,不知道怎么弄才行。
  回复  引用  查看    

#61楼  2008-03-14 10:06 hoodlum1980      
<<腾讯完全封杀非腾讯QQ客户端>>
http://im.qq.com/qq/affiche/20070111.shtml


关于终止使用存在安全漏洞的QQ版本的公告

尊敬的QQ用户:

为了给广大QQ用户提供更加安全、专业、细致的服务,我们在对存有安全漏洞的QQ版本采取了一系列升级措施后,决定从即日起逐步终止存在安全漏洞的QQ版本的使用。
请收到版本停止使用通知的用户登录“腾讯软件中心”(http://im.qq.com/qq/dlqq.shtml),...常使用QQ。
绿色安全、健康有序的网络环境需要每一位网民的热心参与和积极配合。您在使用中遇到任何问题,欢迎到腾讯产品论坛进行反馈(http://im.qq.com/bbs/)。如果您...e.qq.com)。
感谢您对我们长久以来的大力支持,愿QQ能带给您更加健康快乐的在线生活体验。

腾讯公司
二OO七年一月十一日

  回复  引用  查看    

#62楼  2008-03-14 10:12 Brilliance_DaveLin      
强烈支持,不过得小心“疼殉”
  回复  引用  查看    

#63楼  2008-03-14 10:19 Anders Cui      
赞一个
  回复  引用  查看    

#64楼  2008-03-14 10:19 Midapex Village      
LumaQQ在Linux上不稳定,我想把这个QQ.NET通过Mono运行在Linux,就是不知道性能和稳定性怎么样?我想尝试一下。
  回复  引用  查看    

#65楼  2008-03-14 10:20 hoodlum1980      
--引用--------------------------------------------------
stu_acer: @怪怪

好奇的问问,你的文档是怎么生成的?完全跟MSDN里面风格一样,用什么工具呢?
--------------------------------------------------------
我也比较更加关注和感兴趣这个问题。(里面的文件我也编译不了,我用vs2005)

  回复  引用  查看    

#66楼  2008-03-14 10:22 cjs [未注册用户]
超牛叉
  回复  引用    

#67楼  2008-03-14 10:31 韩现龙      
下来看看。
  回复  引用  查看    

#68楼  2008-03-14 10:35 Midapex Village      
我测试了半个小时,运行QQClient的时候,怎么会不停的去发送Get_Online_OP,导致CPU和网络占用严重,不过还好,没有掉线。
正常的QQ应该不会这么频繁的去发送Get_Online_OP吧。
我的测试好友大概150个人,在线的人数在30个左右。谢谢楼主。
  回复  引用  查看    

实在太感谢了!!!!期待他的完善!!
  回复  引用    

#70楼  2008-03-14 11:18 Howard Queen      
支持啊!了不起!耐心与毅力!
  回复  引用  查看    

#71楼 [楼主] 2008-03-14 11:32 阿不      
@ Midapex Village
我测试一下。
  回复  引用  查看    

#72楼 [楼主] 2008-03-14 11:41 阿不      
@ Midapex Village
我刚刚测试了,我的在线好友是23个,没有问题。如果你的有问题,请调试一下看看Finished属性是否一直为false
  回复  引用  查看    

#73楼  2008-03-14 11:47 Midapex Village      
--引用--------------------------------------------------
阿不: @ Midapex Village
我刚刚测试了,我的在线好友是23个,没有问题。如果你的有问题,请调试一下看看Finished属性是否一直为false
--------------------------------------------------------
我的好友是33个,而它始终显示30个,而且超过30个就显示不出来了,少的话没有问题。继续测试中。。。
  回复  引用  查看    

#74楼 [楼主] 2008-03-14 11:51 阿不      
@Midapex Village
我没有那么多在线好友啊?要不你加我MSN
  回复  引用  查看    

#75楼  2008-03-14 11:57 暗香浮动      
公司把端口封了
不知道有没有什么办法测试了。
  回复  引用  查看    

#76楼  2008-03-14 11:57 随风逝去      
好人啊! 目前国内对于QQ的研究资料实在是有限啊!
  回复  引用  查看    

#77楼  2008-03-14 12:05 varptr      
@stu_acer
文档是用NDoc生成的吧
  回复  引用  查看    

#78楼  2008-03-14 12:15 verygood [未注册用户]
下载了30多分钟终于下完了,拜读ing。。。
TO 楼主:要不将文件传到uubox.net吧,下载速度要快一点
  回复  引用    

#79楼  2008-03-14 12:15 Midapex Village      
@阿不
你的MSN是多少啊?
  回复  引用  查看    

恩恩,还不支持群消息,期待加油啊
  回复  引用    

#81楼 [楼主] 2008-03-14 12:34 阿不      
@暗香浮动
你要去找一种可以登录的方式,那这个也就可以登录了。
  回复  引用  查看    

#82楼 [楼主] 2008-03-14 12:35 阿不      
--引用--------------------------------------------------
verygood: 下载了30多分钟终于下完了,拜读ing。。。
TO 楼主:要不将文件传到uubox.net吧,下载速度要快一点
--------------------------------------------------------
好,看来大家访问国外网站都挺慢的,我这边还好,上传的是时候还挺快的。
  回复  引用  查看    

#83楼 [楼主] 2008-03-14 13:08 阿不      
--引用--------------------------------------------------
Midapex Village: @阿不
你的MSN是多少啊?
--------------------------------------------------------
你可以给我留言。
  回复  引用  查看    

#84楼  2008-03-14 13:25 kylinindotnet      
QQUser user = new QQUser(*****, "******");
QQClient client = new QQClient(user);
user.IsUdp = true;
client.LoginServerHost = "219.133.49.171";
client.Login();
if (client.IsLogon == true)
Console.WriteLine("登陆成功!");
else
Console.WriteLine("登陆失败!");
Console.Read();

我怎么一直“登陆失败!”阿。
  回复  引用  查看    

#85楼 [楼主] 2008-03-14 13:27 阿不      
@kylinindotnet
判断是否登录成功并不是在这里啊,QQ的事件是异步的。
  回复  引用  查看