通信项目阶段总结-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客户端不同版本兼容运行的技术思路和实践总结

使用 Netty 实现 IM 聊天贼简单,看不懂就锤爆艿艿的狗头~

腾讯云IM使用总结

Golang搭建即时通信系统IM-System

关于腾讯云IM的一些浅见

个人作业4-alpha阶段个人总结