當前位置:首頁 » 安卓系統 » 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;
}
}

熱點內容
go語言編譯模式 發布:2025-01-20 19:57:25 瀏覽:405
超能編程 發布:2025-01-20 19:56:26 瀏覽:1000
安卓手機怎麼連藍牙汽車 發布:2025-01-20 19:39:05 瀏覽:253
保定軍工存儲廠家 發布:2025-01-20 19:38:53 瀏覽:795
雲伺服器ecs服務條款 發布:2025-01-20 19:19:36 瀏覽:47
安卓系統顯示屏怎麼設置屏保 發布:2025-01-20 19:18:53 瀏覽:896
有鎖機和配置鎖哪個好 發布:2025-01-20 19:18:05 瀏覽:767
安卓版軟體如何設置 發布:2025-01-20 18:58:53 瀏覽:58
java中級項目案例 發布:2025-01-20 18:58:52 瀏覽:913
sql日誌查看工具 發布:2025-01-20 18:57:12 瀏覽:243