1. 依赖
使用smack4.3.4,实测这两条足矣
implementation "org.igniterealtime.smack:smack-tcp:4.3.4"
implementation "org.igniterealtime.smack:smack-android-extensions:4.3.4"
可将第二条替换为这个,轻量些,不想麻烦直接用上面的即可。
implementation "org.igniterealtime.smack:smack-android:4.3.4"
2. 本地连接
网络访问应该写在线程中,虽然这个不写在线程里也不报错,偷个懒。
//Config
public static final String C_HOST = "192.168.1.11";//服务器在局域网中IP
public static final String C_DOMAIN = "up55";//服务器主机名
public static final String C_SOURCE = "test";//源,可忽略
try {
System.out.println("正在连接Chat服务。。。");
XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder()
.setResource(Resourcepart.from(C_SOURCE))//固定源
.setHostAddress(InetAddress.getByName(C_HOST))
.setXmppDomain(C_DOMAIN)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
connection = new XMPPTCPConnection(configuration);
connection.connect();
System.out.println("Chat服务连接成功");
} catch (Exception e) {
System.out.println("Chat服务连接失败" + e.getLocalizedMessage());
e.printStackTrace();
}
3. 远程连接
需指定端口,否则会报错,连接超时,具体原因未知,在java中测试时不加端口号也可正常运行,移到Android中却不行,感兴趣的同学自行探究,有结果别忘艾特我一下。
//Config
public static final String C_HOST = "20.0.0.2";//服务器公网IP
public static final int C_PORT = 5222;//端口
public static final String C_DOMAIN = "up55";//服务器主机名
public static final String C_SOURCE = "YunShang";//源,可忽略
try {
System.out.println("正在连接Chat服务。。。");
XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder()
.setResource(Resourcepart.from(C_SOURCE))//固定源
.setHostAddress(InetAddress.getByName(C_HOST))
.setPort(C_PORT)//增加了端口号
.setXmppDomain(C_DOMAIN)
.setSendPresence(false)//以离线方式登录,以便获取离线消息
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
connection = new XMPPTCPConnection(configuration);
connection.connect();
System.out.println("Chat服务连接成功");
} catch (Exception e) {
System.out.println("Chat服务连接失败" + e.getLocalizedMessage());
e.printStackTrace();
}