最近需要做一些有关即时通讯的项目,花了几天时间搜集了一下有关即时通讯方面的资料
最终选定Openfire做为服务器,Asmack 作为Android端的实现。
1.只能发 不能收
如果按照API上写的去做,直接在new 与某个用户的Chat 之后 addListener,结果就是只能发不能收。
按照下面这样写,可以解决。
- ChatManager cm=conn.getChatManager();
- Chat newChat = cm.createChat(
- "hanchenxi@workgroup", null);
- cm.addChatListener(new ChatManagerListener() {
- @Override
- public void chatCreated(Chat arg0, boolean arg1) {
- arg0.addMessageListener(new MessageListener() {
- @Override
- public void processMessage(Chat arg0, Message arg1) {
- if (arg1.getFrom().contains("")) {
- }
- Log.i("收到消息", arg1.getBody());
- }
- });
- }
- });
2.找不到密钥凭证
在连接配置中加入。
- ConnectionConfiguration connConfig = new ConnectionConfiguration("192.168.1.116", 5222);
- connConfig.setTruststorePath("/system/etc/security/cacerts.bks");
- connConfig.setTruststoreType("bks");
- con = new XMPPConnection(connConfig);
- con.connect();
10月20日,再添加一种支持4.0以上系统的写法
- try {
- ConnectionConfiguration connConfig = new ConnectionConfiguration(
- Config.getString("XmppTools.ServerAddress"), 5222); //$NON-NLS-1$
- Log.i("当前操作系统版本API Level=", Build.VERSION.SDK_INT + ""); //$NON-NLS-1$ //$NON-NLS-2$
- if (Build.VERSION.SDK_INT >= 14) {
- connConfig.setTruststoreType("AndroidCAStore"); //$NON-NLS-1$
- connConfig.setTruststorePassword(null);
- connConfig.setTruststorePath(null);
- } else {
- connConfig.setTruststoreType("BKS"); //$NON-NLS-1$
- String path = System.getProperty("javax.net.ssl.trustStore"); //$NON-NLS-1$
- if (path == null)
- path = System.getProperty("java.home") + File.separator //$NON-NLS-1$
- + "etc" + File.separator + "security" //$NON-NLS-1$ //$NON-NLS-2$
- + File.separator + "cacerts.bks"; //$NON-NLS-1$
- connConfig.setTruststorePath(path);
- }
- // connConfig.setSASLAuthenticationEnabled(false);
- connConfig.setReconnectionAllowed(true);
- connConfig.setSecurityMode(SecurityMode.disabled);
- con = new XMPPConnection(connConfig);
- con.connect();
3.网络方面的异常
保证网络连接的前提下,在连接前
- {
- java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
- java.lang.System.setProperty("java.net.preferIPv6Addresses",
- "false");
- }
4.文件传输
修改asmack源码包 org.jivesoftware.smackx.filetransfer.Socks5TransferNegotiator.discoverLocalIP()方法
- private String discoverLocalIP() throws UnknownHostException {
- try {
- for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
- NetworkInterface intf = en.nextElement();
- for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
- InetAddress inetAddress = enumIpAddr.nextElement();
- if (!inetAddress.isLoopbackAddress()) {
- return inetAddress.getHostAddress().toString();
- }
- }
- }
- } catch (SocketException ex) {
- Logger.error("Error retrieving the local IP", ex);
- }
- throw new UnknownHostException("Failed to retrieve local IP");
- //return InetAddress.getLocalHost().getHostAddress();
- }
暂时就这么多了。
原址:http://blog.csdn.net/yaeio/article/details/7906943
特别补充,在设置configuaration的时候对认证的设置,代码如下:
connConfig.setSASLAuthenticationEnabled(false);
这个属性默认值是true,设置时得需要与服务器那边统一,如果不一致,就算用户注册成功后,登录时也会返回 server-unavailable(503)错误,我们用的是ejabberd服务器,默认设置SASL认证开启,所以开始我设置为false,怎么都无法登录,最后注释这句代码,成功登录:)
相关推荐
有感于3Q大战,自己编写了一个XMPP协议的客户端,目前只实现了简单的基础功能,可以发送消息.其他功能正在开发中.默认已经注册了一个GTalk帐号供测试,大家有自己的GMail帐号也可以直接输入测试.
xmpp android asmack 即时通讯 功能 聊天 包括文件传输
基于xmpp推送的服务器和android客户端源码,已调试通过,可以推送到手机客户端
android基于xmpp,asmack的消息推送源码
基于openfire为服务器的xmpp即时通信 Android客户端
基于XMPP实现android客户端与服务器的交互(源码)
基于xmpp协议的openfire android客户端,登录,接受消息
php开发的基于XMPP 协议的聊天客户端源码
android的XMPP客户端
openfire,Android客户端即时通讯源码,基于asmack4.0实现。
Android版支持XMPP协议的IM客户端源代码,可以自行改造支持Openfire的客户端软件
xmpp+android+openfire+asmack即时通讯客户端聊天 上网下载个openfire服务器安装后即可使用
应http://download.csdn.net/detail/longfei36/5927427 的广大码友要求,现上传源码 基于XMPP 的asmack 安卓即时通讯聊天程序源码 可以正常接收文件,聊天,添加好友,注册,表情等。 特此和广大码友分享
Android 基于XMPP协议IM聊天实现(客户端+服务端) 源码
asmack-android-8-4.0.7jar 2015-02-20更新,现在asmack已经托管到github上,费了很长时间才找到,在这里分享给大家
基于xmpp+asmack+openfire的安卓客户端,界面仿QQ,实现好友添加,消息收发(支持文本,动态表情,图片,及位置类型) 原来的版本Android studio3无法编译通过。修改了一些配置和图片资源 原作者博客地址: ...
XMPP 协议作为Android 系统消息推送的主要技术,已经得到了广泛应用。本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义...
可以正常运行的基于asmack的即时通讯程序 可登录,注册,收发表情,接收文件,添加分组,修改分组,添加好友 如有问题直接联系我邮箱longfei36@vip.qq.com
基于XMPP协议的Android即时通信系统设计
asmack-android8.4.0.7.jar xmpp类库;asmack-android8.4.0.7.jar xmpp类库