用java做了个QQ好友消息群发器,拿出来跟大家分享和交流一下

07-10-18 my766la
API:JQL2006 JDK:1.5 开发工具:eclipse 窗口:swing

项目源码下载地址:http://www.766la.com/766BBS/forum/t-0-5409-1.html

newthinker
2007-10-19 13:40
哇!很神奇!我在netbeans上重构的,可以向所有好友群发消息,代码我在看.看来写的不错,您清华的?看来清华的牛人也比较牛啊.

my766la
2007-10-19 14:17

核心是lumaqq2006 api ,但是直接下载该API还不能用,需要在改装

newthinker
2007-10-19 14:41
luma?who?

my766la
2007-10-19 14:44
就是这里http://lumaqq.linuxsir.org/main/

my766la
2007-10-19 14:44
奇怪怎么会变成**了,

niceo
2007-10-20 15:45
呵呵!!!

好啊 !!!

挺厉害的吗

my766la
2007-10-21 12:59
自己顶一个

my766la
2007-10-21 13:02
把代码拿出来分析一下

准备工作:1.两个QQ(Q号现在好容易申请)

2.eclipse(支持awt swing 可视化开发的版本为佳)

3.JDK1.5以上

4.JQL2006,直接从官方那边下载的不能直接用需要改装,下载地址:http://www.766la.com/766BBS/forum/t-0-5409-1.html

步骤:

1.解压jqgsv0.1beta_src

2.用eclipse导入目录jqgsv0.1beta_src下的项目

3.把jqgsv0.1beta_src目录下的commons-codec.jar 和 commons-logging.jar加到项目属性里的Librares中

4.打开com.myqq.MuiltQQfrendSend,实例代码都在这里,可以直接运行用eclipse运行该类,如果登陆失败,多登陆

几次就可以了

//登陆代码

....

client = new QQClient();

client.setConnectionPoolFactory(new PortGateFactory());

QQUser user = new QQUser(你的Q号, 你Q号的密码);

client.addQQListener(this);

user.setUdp(true);

client.setUser(user);

//client.setLoginServer("sz.tencent.com");

client.setLoginServer("58.61.32.40");

.....

qq服务器地址有多种,你可以选一个填上去,QQ号必须是整型

//发送消息

.....

client.sendIM(一个好友的QQ号,Util.getBytes(comext));//发送一个普通的消息

......

好友的QQ号必须是整型

类QQClient主要是执行QQ客户端的动作,比如,发送消息,添加好友,获取好友等

//获取你的Q号下的所有好友信息

....

GetFriendListReplyPacket gf = (GetFriendListReplyPacket)e.getSource();

java.util.List friends = (java.util.List) gf.friends;

for(int i = 0 ; i < friends.size() ; i++){

QQFriend qf = (QQFriend)friends.get(i);

jTextArea1.setText(jTextArea1.getText() + String.valueOf(qf.qqNum) + "\n");

}

if((int)gf.position != 65535){

client.getFriendList(gf.position);

}else{

jButton2.setEnabled(true);

jButton1.setEnabled(true);

}

........

client.getFriendList() //获取好友列表

这个方法需要配合一个变量position和一个事件才能完成,因为QQ是按多次发送好友列表,position = 65535

表示已到好友列表最后一页,不需要在getFriendList,当得到好友列表会产生一个事件,事件编号为12

GetFriendListReplyPacket 好友类

//事件驱动

jql全部采用事件驱动,实现接口 IQQListener

public void qqEvent(QQEvent e) {//事件监听器

System.out.println("事件ID:" + e.type);

/* 142*/ switch(e.type)

{

/* <-MISALIGNED- > */ /* 142*/ default:

break;

/* <-MISALIGNED- > */ /* 144*/ case 1:

/* <-MISALIGNED- > */ /* 144*/ processLoginSuccess();//对应的事件处理

/* <-MISALIGNED- > */ /* 145*/ break;

/* <-MISALIGNED- > */ /* 147*/ case 2:

/* <-MISALIGNED- > */ /* 147*/ processLoginFail();

/* <-MISALIGNED- > */ /* 148*/ break;

///* <-MISALIGNED- > */ /* 150*/ case 3:

///* <-MISALIGNED- > */ /* 150*/ processLoginUnknownError();

///* <-MISALIGNED- > */ /* 151*/ break;

/* <-MISALIGNED- > */ /* 153*/ case 16:

/* <-MISALIGNED- > */ /* 153*/ processSendIMSuccess();

/* <-MISALIGNED- > */ /* 154*/ break;

/* <-MISALIGNED- > */ /* 156*/ case 10:

/* <-MISALIGNED- > */ /* 156*/ processChangeStatusSuccess();

QQ的每次动作都会产生一个事件,每个事件对应一个整数,在类edu.tsinghua.lumaqq.qq.events.QQEvent有具体描述

如,登陆成功为1,登陆失败为2

先发到这,如有不对的地方,请多多指教

my766la
2007-10-23 16:38
恢复下载了

cosina
2007-10-23 19:56
。。。。。

年轻人 不能这样啊

调用几个API

就算是群发了

就如 有人调个JMF API 就算是一个MP3播放器做好了

my766la
2007-10-25 22:38
呵呵,可以理解cosina的心情

hulaizhi
2007-10-27 12:14
把它做成产品卖给我呀。手机13434746724 胡先生。

cosina
2007-10-29 14:08
楼主大哥 小的知错!

不管咋的 学习的精神都应该值得佩服的 :)

newthinker
2007-10-29 15:24
这个,luma这套东东我这两天看呢,我觉得,恩,他这样做是不对的,很显然他是在利用腾讯的qq,应该属于非法行为,我的疑问是他为什么会把qq的机制理解的这么透彻?是不是跟腾讯有什么不可告人的极其密切的某种联系?按这套api,几乎可以完全实现腾讯公司提供的qq客户端,而且这套api写的质量颇高,由于没有依赖注射之类框架支撑,所以使用的时候,看起来颇费劲!

猜你喜欢
2Go 1 2 下一页