andriod+Smack开发笔记

1级标题

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"/>
发布了34 篇原创文章 · 获赞 1 · 访问量 542

猜你喜欢

转载自blog.csdn.net/weixin_44185736/article/details/103483143