⑴ android端怎么接收openfire服务器发送过来的消息
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 用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的管理控制台,会话-工具中发送消息给所有在线用户
即可看到打印信息:在管理控制台发送的消息
⑶ openfire怎么实现androi推送 还需要用到哪些东西
1、定期查询:间隔特定时间查询数据库,有新消息时显示。优点:实现起来简单;缺点:实时性不够好,对于移动客户端耗电量太大;
2、通过socket推送:建立一个长连接,一有新消息就发送给客户端。在局域网内没问题,但是跨网时客户端一直无法收到消息;
3、通过短息推送:这个一般有人卖短信发送接口的,但是比较费钱
4、长轮询:基本上与目前很多网站使用的方式一样(WEB阿里旺旺、微博、人人等等)。客户端发起一个很长超时时间的请求,然后服务器端在没有消息的时候阻塞这个请求(一直不给返回值)直到快要超时为止,有消息到来再返回响应。客户端收到响应或超时后立即再发起请求。
⑷ android studio怎么使用openfire
Android studio为我们提供了git的插件,让我们能够很好的进行版本控制,这篇blog我们就来展示一下如何使用(操作系统是win7)。
准备,下载window上的git, 下载地址 ;在studio中设置git插件:File->Setting->Version Control->Git, 然后可以点击Test测试一下,如下图:那么你就设置成功了。
2.初始化git项目(git init),操作如下:VCS->Enable Control Integration->Select "Git".
3.为git添加remote,在这一步中,studio没有为我们提供可视化的GUI,得用Git工具了。找到并打开git安装目录下面的Git Bash,将目录切换到项目的目录,然后输入git添加remote的命令,例如:git remote add origin "https://github.com/xxx/xxx.git".
4.将代码添加到VCS(git add),选中要提交的文件->VCS->Git->Add,
⑸ 我用eclipse写的android聊天软件连接不到本地openfire,初始配置都是从网上参考的,就是不行,
填你的电脑的ip,别用127.0.0.1,这个表示Android自己本机
⑹ 基于Openfire+XMPP下通过asmack开发Android端的即时通讯APP方法与步奏
有相应的文档和demo。文档连接发泥私信了,具体demo其实也有现成的,用到的类有限不是很多。
⑺ android openfire remote-server-not-found怎么解决
android openfire remote-server-not-found怎么解决
android客户端接收 openfire 服务器发送来的消息:
客户端代码如下:
Java代码
package com.example.openfiretest;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.Message;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText accountEditText;
private EditText passwordEditText;
public void onCreate(Bundle savedInstanceState) {
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(new OnClickListener() {
public void onClick(View v) {
String account = accountEditText.getText().toString();
String password = passwordEditText.getText().toString();
if (account.equals("") || password.equals("")) {
Toast.makeText(MainActivity.this, "账号或密码不能为空!",
Toast.LENGTH_SHORT).show();
} else {
ClientConServer ccs = new ClientConServer(MainActivity.this);
boolean b = ccs.login(account, password);
// 如果登录成功
⑻ openfire 和androidpn哪个好些
目前来看相对openfire来说安卓更为主流:
1、Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
2、Android(['ændrɔid])是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟开发与领导。 Android 系统最初由安迪·鲁宾(Andy Rubin)制作,最初主要支持手机。2005年8月17日被Google收购。2007年11月5日,Google与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance)来共同研发改良Android系统并生产搭载Android的智慧型手机,并逐渐拓展到平板电脑及其他领域上。随后,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。
⑼ 如何写一个MQTT连接的android客户端
MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。 我们可以从这里下载该项目的实例代码,并且可以找到一个采用php书写的服务器端实现。 架构如下所示: wmqtt.jar 是IBM提供的MQTT协议的实现。你可以从如下站点下载它。你可以将该jar包加入你自己的Android应用程序中。 Really Small Message Broker (RSMB) ,他是一个简单的MQTT代理,同样由IBM提供。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。 SAM是一个针对MQTT写的PHP库。你可以从这个下载它. send_mqtt.php是一个通过POST接收消息并且通过SAM将消息发送给RSMB的PHP脚本。 实例代码: Ø 采用XMPP协议实现Android推送 这是我在项目中采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。 XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。 androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程openfire基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下: androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。 androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下: 最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。 服务器端界面如下,分别对应了上述的几个功能模块: 发送以后,我们可以在手机端看到接收的消息: