当前位置:首页 » 安卓系统 » xmppsmackandroid

xmppsmackandroid

发布时间: 2022-10-03 21:05:46

① android中 的xmpp连接服务器总是出非法状态异常异常是怎么回事

04-24 00:51:37.885: W/System.err(329): java.lang.IllegalStateException: Not connected to server.
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:488)
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:353)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:230)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.Connection.login(Connection.java:353)
04-24 00:51:37.895: W/System.err(329): at com.wxs.model.User.login(User.java:200)
04-24 00:51:37.895: W/System.err(329): at com.wechat.project.activity.LoginAcitivity$4$1.run(LoginAcitivity.java:78)
04-24 00:51:37.905: W/System.err(329): at java.lang.Thread.run(Thread.java:1096)

② android 用openfire做服务器,smack来连接怎么连接不上

给你个例子
连接类
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;

public class Conn {
private static XMPPConnection connection = null ;

public static XMPPConnection getConnection(String domain)
throws XMPPException {
XMPPConnection connection = new XMPPConnection(domain);
connection.connect();
return connection;
}

public static XMPPConnection getConnection(String domain, int port)
throws XMPPException {
if(connection==null){
ConnectionConfiguration config = new ConnectionConfiguration(domain,port);
connection = new XMPPConnection(config);
connection.connect();
}
return connection;
}
}

测试类
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;

public class Test2 {

public static boolean LongAccount(XMPPConnection connection,
String username, String password) {
try {
connection.login(username, password);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

public static void main(String[] args) throws XMPPException {
XMPPConnection connection = Conn.getConnection("192.168.1.117");
boolean t = LongAccount(connection, "[email protected]", "password");
System.out.println("t login =" + t);
if(t){

ChatManager chatmanager = connection.getChatManager();

//新建一个会话
Chat newChat = chatmanager.createChat("[email protected]", new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("start me , Received from 【" + message.getFrom() + "】 message: " + message.getBody());
}
});

//发送消息
newChat.sendMessage("我是菜鸟");
}
}
转载,仅供参考。

③ 如何实现消息推送功能

?可以用第三方软件极光推送来实现。对于定制化需求较强的,或者想拥有自己推送平台的开发者,极光提供全功能的私有云方案。
极光推送快速开始步骤: 1、到极光推送官方网站注册开发者帐号;
2、登录进入管理控制台,创建应用程序,得到 Appkey(SDK 与服务器端通过 Appkey 互相识别);
3、在推送设置中给 Android 设置包名、给 iOS 上传证书、启用 WinPhone,根据你的需求进行选择;
4、下载 SDK 集成到 App 里。
客户端初始化 JPush 成功后,JPush 服务端会分配一个 Registration ID,作为此设备的标识(同一个手机不同 App 的 Registration ID 是不同的)。开发者可以通过指定具体的 Registration ID 来进行对单一设备的推送。

④ Android基于XMPP Smack openfire 开发的聊天室。怎么让创建者把聊天室删除掉

只能告诉你方法了,查看xmpp协议说明

⑤ android消息推送GCM、XMPP、MQTT三种方案的优劣,越仔细越好,有具体分析更好!

android消息推送GCM、XMPP、MQTT三种方案的优劣:
1、GCM服务(Google Cloud Messaging)优点:Google提供的服务、原生、简单,无需实现和部署服务端。缺点:Android版本限制,该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
2、XMPP协议(Openfire + Spark + Smack)优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
3、MQTT协议优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件rsmb。缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。
d消息推送可以去了解一下极光,极光是个不错的平台。极光紧密围绕移动开发者需求,打造的开发者服务平台,可以提供一站式SaaS服务,通过全面覆盖PC、手机、传感器、无线路由器等多种设备数据,打造全域数据平台。当前,不断更新的SaaS产品及服务已深受国内百万开发者的认可和信赖。

⑥ 如何在 aSmack xmpp 中创建组 android 吗

您可以创建用户组,
public boolean createGroup(XMPPConnection connection,String groupName) {
if (connection == null)
return false;
try {
connection.getRoster().createGroup(groupName);
Log.v("Group created : ", groupName);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

如果你踢在 xmpp 中创建分组聊天再试试下面的方法。(* * 未选中)
public class createMucAT extends AsyncTask<Void, Void, MultiUserChat> {

private RosterGroup group;
private Connection conn;
private String groupId;
private String groupName;

public createMucAT(Connection conn, RosterGroup group, String groupId,
String groupName) {
this.group = group;
this.conn = conn;
this.groupId = groupId;
this.groupName = groupName;

}

@Override
protected MultiUserChat doInBackground(Void... params) {
String groupTag = group.getName();
MultiUserChat chat = null;
try {
chat = createGroupChat(conn, groupId, groupTag, conn.getUser());
} catch (XMPPException e) {
e.printStackTrace();
}
return chat;
}

@Override
protected void onPostExecute(MultiUserChat result) {
super.onPostExecute(result);
//handle the result here
}

private MultiUserChat createGroupChat(Connection conn, String groupId, String groupName, String nickname) throws XMPPException {
MultiUserChat muc = new MultiUserChat(conn, groupId + "@" + ConnectionService.CONFERENCE_IP_ADDRESS);
muc.create(nickname);
Form form = muc.getConfigurationForm();
Form submitForm = form.createAnswerForm();
for (Iterator<FormField> fields = form.getFields(); fields.hasNext();) {
FormField field = (FormField) fields.next();
if (!FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable() != null) {
submitForm.setDefaultAnswer(field.getVariable());
}
}
List<String> owners = new ArrayList<String>();
owners.add(ConnectionService.getConnection().getUser().toString());
submitForm.setAnswer("muc#roomconfig_roomowners", owners);
submitForm.setAnswer("muc#roomconfig_persistentroom", true);
submitForm.setAnswer("muc#roomconfig_roomdesc", groupName);
muc.sendConfigurationForm(submitForm);
return muc;
}
}

⑦ android使用smack要注意什么

Smack是一个开源、易用的XMPP/Jabber客户端库,它使用Java语言开发,由Jive Software...最新的好消息是Smack在4.1.0版后将直接支持Android系统

⑧ android消息推送GCM、XMPP、MQTT三种方案的优劣是什么

android消息推送GCM、XMPP、MQTT三种方案的优劣如下:
1、GCM
(1)优点:提供的服务、原生、简单,无需实现和部署的服务端。
(2)缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定相关的Google帐号,而且只受限于Google。
2、XMPP
(1)优点:成熟、强大、可扩展也性强、目前主要应用于聊天系统中,且已有开源的Java版的开发实例androidpn。
(2)缺点:协议较复杂、冗余(基于XML)、也比较费流量和费电,部署硬件成本高。
3、MQTT
(1)优点:简洁、小巧、可扩展性强、是比较省流量、省电。目前已有C++版的服务端组件rsmb。
(2)缺点:不够成熟、实现起来较复杂、服务端组件rsmb不开源,也是部署硬件成本较高。
消息推送软件可以使用深圳极光的。极光成立于2011年;凭借领先的人工智能及机器学习技术,极光将在APP消息推送、用户增长与活跃等方面为客户提供服务。

⑨ android 用openfire做服务器,smack来连接怎么连接不上

android客户端接收 openfire 服务器发送来的消息:

客户端代码如下:

Java代码

packagecom.example.openfiretest;

importorg.jivesoftware.smack.Chat;

importorg.jivesoftware.smack.ChatManager;

importorg.jivesoftware.smack.ChatManagerListener;

importorg.jivesoftware.smack.ConnectionConfiguration;

importorg.jivesoftware.smack.MessageListener;

importorg.jivesoftware.smack.XMPPConnection;

importorg.jivesoftware.smack.packet.Message;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.Window;

importandroid.widget.CheckBox;

importandroid.widget.EditText;

importandroid.widget.Toast;

{

;

;

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

accountEditText=(EditText)findViewById(R.id.username);

passwordEditText=(EditText)findViewById(R.id.password);

findViewById(R.id.login).setOnClickListener(newOnClickListener(){

publicvoidonClick(Viewv){

Stringaccount=accountEditText.getText().toString();

Stringpassword=passwordEditText.getText().toString();

if(account.equals("")||password.equals("")){

Toast.makeText(MainActivity.this,"账号或密码不能为空!",

Toast.LENGTH_SHORT).show();

}else{

ClientConServerccs=newClientConServer(MainActivity.this);

booleanb=ccs.login(account,password);

//如果登录成功

if(b){

Toast.makeText(MainActivity.this,"登陆成功!",

Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(MainActivity.this,"登陆失败!",

Toast.LENGTH_SHORT).show();

}

}

}

});

}

}

然后在登陆以后添加一个监听消息的监听器,用来监听收到的消息(代码89、90行):

Java代码

packagecom.example.openfiretest;

importjava.util.Collection;

importorg.jivesoftware.smack.Chat;

importorg.jivesoftware.smack.ChatManager;

importorg.jivesoftware.smack.ChatManagerListener;

importorg.jivesoftware.smack.ConnectionConfiguration;

importorg.jivesoftware.smack.MessageListener;

importorg.jivesoftware.smack.Roster;

importorg.jivesoftware.smack.RosterEntry;

importorg.jivesoftware.smack.RosterGroup;

importorg.jivesoftware.smack.XMPPConnection;

importorg.jivesoftware.smack.XMPPException;

importorg.jivesoftware.smack.packet.Message;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.os.Handler;

importandroid.util.Log;

importandroid.widget.Toast;

publicclassClientConServer{

privatestaticintPORT=5222;

privateContextcontext;

publicClientConServer(Contextcontext){

this.context=context;

}

//这里收到消息后,通过广播将消息发送到需要的地方.哈哈,既然收到了服务器发送来的信息,如何处理自己决定。

privateHandlerhandler=newHandler(){

publicvoidhandleMessage(android.os.Messagem){

Messagemsg=newMessage();

msg=(Message)m.obj;

//把从服务器获得的消息通过广播发送

Intentintent=newIntent("org.yhn.mes");

String[]message=newString[]{

msg.getFrom(),

msg.getBody()};

System.out.println("==========收到服务器消息From==========="+message[0].toString());

System.out.println("==========收到服务器消息Body==========="+message[1].toString());

intent.putExtra("message",message);

context.sendBroadcast(intent);

};

};

publicbooleanlogin(Stringa,Stringp){

ConnectionConfigurationconfig=newConnectionConfiguration("192.168.0.124",PORT);

/**是否启用安全验证*/

config.setSASLAuthenticationEnabled(false);

/**是否启用调试*/

//config.setDebuggerEnabled(true);

/**创建connection链接*/

XMPPConnectionconnection=newXMPPConnection(config);

try{

/**建立连接*/

connection.connect();

/**登录*/

connection.login(a,p);

/**开启读写线程,并加入到管理类中*/

//ClientSendThreadcst=newClientSendThread(connection);

//cst.start();

//ManageClientThread.addClientSendThread(a,cst);

//获取用户组、成员信息。

System.out.println("======开始获取组及用户==========");

Rosterroster=connection.getRoster();

Collection<RosterGroup>entriesGroup=roster.getGroups();

System.out.println("组的个数:"+entriesGroup.size());

for(RosterGroupgroup:entriesGroup){

Collection<RosterEntry>entries=group.getEntries();

System.out.println("=========groupName==="+group.getName());

for(RosterEntryentry:entries){

//Presencepresence=roster.getPresence(entry.getUser());

//Log.i("---","user:"+entry.getUser());

System.out.println("组成员名字:"+entry.getName());

//Log.i("---","tyep:"+entry.getType());

//Log.i("---","status:"+entry.getStatus());

//Log.i("---","groups:"+entry.getGroups());

}

}

System.out.println("======结束获取组及用户==========");

//在登陆以后应该建立一个监听消息的监听器,用来监听收到的消息:

ChatManagerchatManager=connection.getChatManager();

chatManager.addChatListener(newMyChatManagerListener());

returntrue;

}catch(XMPPExceptione){

e.printStackTrace();

}

returnfalse;

}

/**messagelistener*/

{

publicvoidchatCreated(Chatchat,booleanarg1){

chat.addMessageListener(newMessageListener(){

publicvoidprocessMessage(Chatarg0,Messagemsg){

/**通过handler转发消息*/

android.os.Messagem=handler.obtainMessage();

m.obj=msg;

m.sendToTarget();

}

});

}

}

}

启动android客户端,进行登录

然后在openfire的管理控制台,会话-工具中发送消息给所有在线用户

即可看到打印信息:在管理控制台发送的消息

⑩ Android 基于XMPP Smack Openfire 小结怎么解决

首先第一、与服务器建立好连接
关键代码:127.0.0.1为服务器IP,5222为服务器端口号

[java] view plain print?
/**
* 连接服务器
*
* @return
*/
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222);
/** 是否启用安全验证 */
config.setSASLAuthenticationEnabled(false);
/** 是否启用调试 */
// config.setDebuggerEnabled(true);
/** 创建connection链接 */
try {
connection = new XMPPConnection(config);
/** 建立连接 */
connection.connect();
return true;
} catch (XMPPException e) {
e.printStackTrace();
}
return false;
}

第二、实现注册

关键代码:
以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。

[java] view plain print?
/**
* 注册
*
* @param account 注册帐号
* @param password 注册密码
* @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
*/
public String regist(String account, String password) {
if (connection == null)
return "0";
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(ClientConServer.connection.getServiceName());
reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(password);
reg.addAttribute("android", "geolo_createUser_android");// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter);
ClientConServer.connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
Log.e("RegistActivity", "No response from server.");
return "0";
} else if (result.getType() == IQ.Type.RESULT) {
return "1";
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "2";
} else {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "3";
}
}
}

第三、实现登录

关键代码: 代码很简单不做太多解释

[java] view plain print?
/**
* 登录
*
* @param a 登录帐号
* @param p 登录密码
* @return
*/
public boolean login(String a, String p) {
try {
if (connection == null)
return false;
/** 登录 */
connection.login(a, p);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

第四、修改密码

关键代码:同样很简单
[java] view plain print?
/**
* 修改密码
* @param connection
* @return
*/
public static boolean changePassword(XMPPConnection connection,String pwd)
{
try {
connection.getAccountManager().changePassword(pwd);
return true;
} catch (Exception e) {
return false;
}
}

热点内容
62数据库 发布:2025-01-20 22:49:15 浏览:365
安卓模拟大自然怎么玩 发布:2025-01-20 22:46:55 浏览:361
科密加密卡片 发布:2025-01-20 22:45:01 浏览:111
苹果的文件怎么转到安卓 发布:2025-01-20 22:43:10 浏览:652
c语言回文串 发布:2025-01-20 22:43:09 浏览:767
垃圾压缩价格 发布:2025-01-20 22:14:05 浏览:421
温十系统如何看处理器配置 发布:2025-01-20 21:59:47 浏览:302
米号源码 发布:2025-01-20 21:55:30 浏览:893
电信四川dns服务器ip 发布:2025-01-20 21:54:51 浏览:92
电脑弹出脚本错误还能继续使用吗 发布:2025-01-20 21:42:29 浏览:586