iQQ 学习笔记1 :登录、验证码、收消息

iQQ 学习笔记1说明 :登录、验证码、收消息
QQ最基本的功能是登录、收消息。iQQ基于WebQQ协议,WebQQ的登录过程中还会要求用户输入验证码,因此调用iQQ的最基本的功能就是登录、验证码、收消息。

iQQ 学习笔记1程序 :登录、验证码、收消息
其中的username常量的值应替换为QQ号,password常量的值应替换为该QQ号对应的QQ密码。
[java]  view plain copy
  1. package test;  
  2. /** 
  3.  * 用于手工输入验证码 
  4.  */  
  5. import java.io.BufferedReader;  
  6. /** 
  7.  * 用于创建验证码文件 
  8.  */  
  9. import java.io.File;  
  10. /** 
  11.  * ImageIO.write和InputStreamReader.readLine会抛出IOException异常 
  12.  */  
  13. import java.io.IOException;  
  14. /** 
  15.  * 用于获取人工输入的验证码 
  16.  */  
  17. import java.io.InputStreamReader;  
  18. /** 
  19.  * 用于生成验证码图片 
  20.  */  
  21. import javax.imageio.ImageIO;  
  22. /** 
  23.  * QQ客户端接口 
  24.  */  
  25. import iqq.im.QQClient;  
  26. /** 
  27.  * QQActionFuture.waitFinalEvent 会抛出该异常 
  28.  */  
  29. import iqq.im.QQException;  
  30. /** 
  31.  * QQ通知事件监听器 
  32.  */  
  33. import iqq.im.QQNotifyListener;  
  34. /** 
  35.  * WebQQ客户端的实现 
  36.  */  
  37. import iqq.im.WebQQClient;  
  38. /** 
  39.  * QQActorDispathcer接口的实现,用于WebQQClient 
  40.  */  
  41. import iqq.im.actor.ThreadActorDispatcher;  
  42. /** 
  43.  * QQ消息 
  44.  */  
  45. import iqq.im.bean.QQMsg;  
  46. /** 
  47.  * QQClient.login中的参数 
  48.  */  
  49. import iqq.im.bean.QQStatus;  
  50. /** 
  51.  * QQActionFuture.waitFinalEvent的返回值类型 
  52.  */  
  53. import iqq.im.event.QQActionEvent;  
  54. /** 
  55.  * QQClient的远程函数的返回值类型 
  56.  */  
  57. import iqq.im.event.QQActionFuture;  
  58. /** 
  59.  * QQNotifyListener.onNotifyEvent的参数 
  60.  */  
  61. import iqq.im.event.QQNotifyEvent;  
  62. /** 
  63.  * QQNotifyEvent.getTarget的值类型 
  64.  */  
  65. import iqq.im.event.QQNotifyEventArgs;  
  66. /** 
  67.  *  
  68.  */  
  69. import iqq.im.event.QQActionEvent.Type;  
  70.   
  71. public class test_1 {  
  72.     /** 
  73.      * 声明一个QQ号常量 
  74.      */  
  75.     private static final String username = "**********";  
  76.     /** 
  77.      * 声明一个密码常量 
  78.      */  
  79.     private static final String password = "**********";  
  80.     /** 
  81.      * 声明一个QQ客户端接口QQClient的变量 
  82.      */  
  83.     private static QQClient client;  
  84.     public static void main(String[] args) {  
  85.         /** 
  86.          * 创建一个WebQQ客户端对象 
  87.          */  
  88.         client = new WebQQClient(username, password, new QQNotifyListener() {  
  89.             /** 
  90.              * 声明QQ通知事件的监听函数 
  91.              */  
  92.             @Override  
  93.             public void onNotifyEvent(QQNotifyEvent event) {  
  94.                 /** 
  95.                  * 判断通知事件是否是收到聊天消息 
  96.                  */  
  97.                 if (event.getType() == QQNotifyEvent.Type.CHAT_MSG) {  
  98.                     /** 
  99.                      * 判断事件中的对象是否是QQ消息 
  100.                      */  
  101.                     if (event.getTarget() instanceof QQMsg) {  
  102.                         /** 
  103.                          * 获取QQ消息对象 
  104.                          */  
  105.                         QQMsg msg = (QQMsg) event.getTarget();  
  106.                         try {  
  107.                             /** 
  108.                              * 获取QQ消息内容 
  109.                              */  
  110.                             System.out.println(msg.packContentList());  
  111.                         } catch (QQException e) {  
  112.                             e.printStackTrace();  
  113.                         }  
  114.                     }  
  115.                 } else if (event.getType() == QQNotifyEvent.Type.CAPACHA_VERIFY) {  
  116.                     /** 
  117.                      * 判断事件中的对象是否是图片验证码 
  118.                      */  
  119.                     if (event.getTarget() instanceof QQNotifyEventArgs.ImageVerify) {  
  120.                         /** 
  121.                          * 获取图片验证码对象 
  122.                          */  
  123.                         QQNotifyEventArgs.ImageVerify verify = (QQNotifyEventArgs.ImageVerify) event.getTarget();  
  124.                         try {  
  125.                             /** 
  126.                              * 把图片验证码保存在本地 
  127.                              */  
  128.                             ImageIO.write(verify.image, "png"new File("verify.png"));  
  129.                             /** 
  130.                              * 显示服务器端给出的验证码原因 
  131.                              */  
  132.                             System.out.println(verify.reason);  
  133.                             /** 
  134.                              * 在控制台显示请用户人工识别验证码 
  135.                              */  
  136.                             System.out.print("请输入在项目根目录下verify.png图片里面的验证码:");  
  137.                             /** 
  138.                              * 读取用户输入的验证码 
  139.                              */  
  140.                             String code = new BufferedReader(new InputStreamReader(System.in)).readLine();  
  141.                             /** 
  142.                              * 提交验证码 
  143.                              */  
  144.                             client.submitVerify(code, event);  
  145.                         } catch (IOException e) {  
  146.                             e.printStackTrace();  
  147.                         }  
  148.                           
  149.                     }  
  150.                 } else {  
  151.                     /** 
  152.                      * 显示未处理的QQ通知事件 
  153.                      */  
  154.                     System.out.println("TODO QQNotifyEvent: " + event.getType() + ", " + event.getTarget());  
  155.                 }  
  156.             }  
  157.         }, new ThreadActorDispatcher());  
  158.         /** 
  159.          * 登录客户端 
  160.          */  
  161.         QQActionFuture future = client.login(QQStatus.ONLINE, null);  
  162.         try {  
  163.             /** 
  164.              * 等待完成登录 
  165.              */  
  166.             QQActionEvent event = future.waitFinalEvent();  
  167.             /** 
  168.              * 判断登录状态 
  169.              */  
  170.             if (event.getType() == Type.EVT_OK) {  
  171.                 /** 
  172.                  * 开始抓消息,此后才有可能收到 CHAT_MSG 事件 
  173.                  */  
  174.                 client.beginPollMsg();  
  175.             }  
  176.         } catch (QQException e) {  
  177.             e.printStackTrace();  
  178.         }  
  179.     }  
  180. }  

iQQ 学习笔记1测试 :登录、验证码、收消息
测试本程序需要注册两个QQ号,并互相加为好友。保持一个QQ使用客户端登录,另一个QQ的QQ号和密码填写在程序中。
运行程序,将出现如下提示
  1. 为了保证您账号的安全,请输入验证码中字符继续登录。
  2. 请输入在项目根目录下verify.png图片里面的验证码:
复制代码
查看图片,人工输入验证码,然后在QQ客户端向这个QQ发消息,例如输入Hello!,程序将显示如下所示内容
  1. [["font",{"style":[0,0,0],"color":"000000","name":"宋体","size":9}],"Hello!"]
复制代码
这就说明程序运行成功了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值