3.1、服务端建立步骤
3.1.1、语言选择
在服务器上安装好openfire软件后,打开openfire会自动打开9090端口并由此端口进入管理页面,第一次进入时会是配置页面跟着提示确认点继续即可。如图3-1选择管理页面语言,可以选择中文即可,如图3-2需填写“域”和“server Host Name”可以自己填写,若是只需实现局域网通信,可以填写本机器局域网的地址或是回环地址(127.0.0.1),在此次实验的系统中我是需要实现全网通信,所以我填的是我服务器的公网地址。
图3-1
3.1.2、服务器地址与域名填写
如图3-2需填写“域”和“server Host Name”可以自己填写,若是只需实现局域网通信,可以填写本机器局域网的地址或是回环地址(127.0.0.1),在此次实验的系统中我是需要实现全网通信,所以我填的是我服务器的公网地址。 其中端口都是默认好的了,可以改可以不改。
图3-2
3.1.3、数据库选择
如图3-3选择“标准标准数据库”,因为本次实验是需要使用mysql数据库的。若是不使用外部的数据库,那可以选择“嵌入的数据库”。
图3-3
3.1.4、数据库配置
如图3-4为配置外部数据的页面,选择导入的外部数据库,openfire会自动导入相对应的驱动,然后在“数据库URL”中将”HOSTNAME”改为安装数据库的机器的IP地址,本实验是将mysql和openfire安装在同一个机器即服务器上,故只需改成回环地址(127.0.0.1),”DATABASENAME”改成已在mysql数据库中已经创建了的一个空白数据库名。
图3-4
3.1.5、数据库配置错误处理
此处配置数据库会出现错误如图3-5提示,看错误日志如图3-6可以看到应该无法解析数据库的名字,此处有解决方案如下:
(a)、一种是降版本,并不推荐,如果需要降版本5.5版本可以满足基本需要;
(b)、还有一种是在jdbc连接的url后面加上serverTimezone=UTC或GMT即可,如果需要指定使用gmt+8时区,需要写成GMT%2B8,不然可能会报错误,解析为空
图3-5
图3-6
3.1.6、配置文件设置
如图3-7选择默认设置即可。
图3-7
3.1.7、管理员账户设置
管理员账户名默认为“admin”,可以重新设置其密码,选择跳过其默认密码为“admin”。
图3-8
3.1.8、登录openfire管理页面
在初始配置完成之后,在此打开openfire即可出现登录页面如图3-9,使用admin账号可以登录。登录成功后进入如图3-10的管理界面,到此服务端程序配置完成。
图3-9
图3-10
一、andriod导入smack包
有坑,官网下的包很多andriod是不支持的,可以以下面这种形式导入包。
跟着123找到对应位置改了dependencies。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
api 'org.igniterealtime.smack:smack-android:4.1.9'
api 'org.igniterealtime.smack:smack-tcp:4.1.9'
api 'org.igniterealtime.smack:smack-im:4.1.9'
api 'org.igniterealtime.smack:smack-extensions:4.1.9'
}
二、将连接服务器的服务类放在Service中
-----本人能力有限,当时赶课设没有具体弄懂andriod中Service的用法,所以没有实现连接服务的模块写在Service中,只是单纯的写在Class中,这样连接容易断掉,具体我没有实验,不过在我运用过程中没有出现传输不到的问题。
下面是我写的连接Class
public class ConnectionManager {
private static XMPPTCPConnection connection;
private static XMPPTCPConnection con;
private static String host = "127.0.0.1";
//private static String host = "10.157.17.65";
private static int port = 5222;
private static String serviceName = host;
public static AbstractXMPPConnection getConnection() {
if (connection == null) {
openConnection();
}
return connection;
}
// 打开连接
private static void openConnection() {
XMPPTCPConnectionConfiguration.Builder builder
= XMPPTCPConnectionConfiguration.builder();
builder.setHost(host);
builder.setPort(port);
builder.setServiceName(serviceName);
builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
connection = new XMPPTCPConnection(builder.build());
try {
connection.connect();
} catch (Exception e) {
e.printStackTrace();
}
}
//区别于抽象连接
// 关闭连接
public static void release() {
if (connection != null) {
connection.disconnect();
connection = null;
}
}
}
其实这里ip地址不能时回环地址(127.0.0.1),我只是写出来做示范,写回环地址编译会出错,虽然服务器的地址可以是回环地址。
三、联网程序需加入权限
如上图在mainfest程序中填入如下代码,要添加在的前面。还有其他权限,比如存储、麦克风、摄像头等都需要类似添加权限。
```xml
<uses-permission android:name="android.permission.INTERNET"/>