通信项目阶段总结-IM聊客户端
Posted pan861190079
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通信项目阶段总结-IM聊客户端相关的知识,希望对你有一定的参考价值。
这个学习项目的客户端业务流程基本是我写的,由于界面是用java的swing写的,非常难配置,所以很多都是直接使用的QQ的界面,不过既然能够分成模块,那么前台后台自然是无关的。下面给出我的业务流程代码供大家学习交流:
这里用的是xmpp协议,因此客户端和服务器两段都分别都有一个相同的解析该协议的方法,这是应该事先沟通好的
这一块是用单例模式封装的客户端,保证同一时间只能有一个socket流,同样的,ObjectOutputStream和ObjectInputStream流也要保证只有一个。这样不管在哪想获取到其中任何一个流,都保证不会拿错:
package util;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MyClient {
/**
* 单例模式保证只能拿到一个实例对象
*
* @author 86119
*
*/
private MyClient() {
}
private static MyClient mc;
private Socket client;
private ObjectOutputStream oos;
private ObjectInputStream ois;
public ObjectOutputStream getOos() {
return oos;
}
public ObjectInputStream getOis() {
return ois;
}
// 包装保证同一时间只能有一个实例对象存在
public static synchronized MyClient getInstance() {
if (mc == null) {
mc = new MyClient();
}
return mc;
}
// 实例对象的方法
public void getConnection() {
try {
if (client == null) {
client = new Socket("localhost", 9898);
System.out.println("客户端启动成功");
OutputStream ous = client.getOutputStream();
InputStream ins = client.getInputStream();
// 包装数据流
oos = new ObjectOutputStream(ous);
ois = new ObjectInputStream(ins);
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 关闭流
public void closeConnection() {
try {
oos.close();
ois.close();
client.close();
client = null;
} catch (IOException e) {
e.printStackTrace();
}
}
接下来是两个工具类,这里分别是自定义的工具类和流程工具类。
以上是关于通信项目阶段总结-IM聊客户端的主要内容,如果未能解决你的问题,请参考以下文章
IM开发干货分享:IM客户端不同版本兼容运行的技术思路和实践总结