Java版--仿QQ简单通讯软件之两周成事!

该篇博客所讲是自己学习仿QQ即时通讯软件开发教学视频的总结。因为大致只用了一周多的时间,所以功能特别简单,适合新手第一次尝试项目。

废话不多说,直接上干货。

转载请标明出处:桑尼号 http://blog.csdn.net/aws_yibadao

GiuHub链接获取完整代码:https://github.com/LBJ-LOVE/MyQQ

整个项目框架:

逐个说明如下:

1、ht.bean中两个类:Account对应数据库中account表,成员变量与表中字段一一对应,并生成对应的set、get函数。我用的数据库是mysql、数据库的连接会在ht.db包中介绍。因为是给新手看的,所以我尽量说的详细,把基础的内容也都说一下,我本身也是新手也算是自己再巩固下基础内容。

	private int 	QQNum;//QQ号
	private String 	trueName;//真实名字
	private String 	nickName;//昵称
	private String 	password;//密码
	private String 	sex;//性别
	private int 	age;//年龄
	private String 	nation;//--民族
	private String 	faceImage;//--头像
	private String 	address;//--地址
	private String 	email;//邮箱
	private String 	ip;//地址
	private int 	port;//端口号
	private String 	status;//状态(在线,离线,隐身,忙碌)
	private String groupName;
Friend类是保存好友信息的对应于数据库中friend表:

	private int id;
	private int myQQNum;
	private int friendQQNum;
	private String group;//分组
	private int invalid;//0不是黑名单,1是黑名单
2、ht.db 连接数据库与对数据库的操作都放在这里

数据库连接,opendb()静态函数用来获取数据库连接。

		try{
			//1.调入驱动
			Class.forName("com.mysql.jdbc.Driver");//调入驱动
			//2.连接数据库
			if(conn==null || conn.isClosed()){
				conn = DriverManager.getConnection(URL, USER, PASSWORD);
			}
			if(!conn.isClosed())
				System.out.println("数据库连接成功...");
			else
				System.out.println("数据库连接失败,请确认用户名或密码是否准确...");
		}catch (Exception e) {
			e.printStackTrace();//打印错误信息
		}	
		return conn;
数据库操作:

void addAccount(Account acc) //注册用户也就是向数据库中添加记录,数据库的增删改查百度一下你就知道,这里篇幅原因就不贴代码了。sql=“insert into account values(?,?,?...)”   

prepareStatement(sql)(用这个prepareStatement不用createStatement,原因可以百度都有)

Account login(Account acc) //登录 也就是通过QQ账号和密码来得到该账号的所有信息。

sql="select * from account where QQNum=? and password=?"

这里先说这两个方法,按照项目的真实过程之后的方法会在用到的时候再写,只要知道凡是涉及到操作数据库的操作都放在这个包中就可以了。

3、ht.common 命令字与一些公关的类

Cmd命令字,表征一系列的动作

public class Cmd {
	//命令字
	public static final int CMD_LOGIN=1001;//登陆通知
	public static final int CMD_SEND=1002;//发送消息
	public static final int CMD_HIDDEN=1003;//隐身通知
	public static final int CMD_BUSY=1004;//忙碌通知
	public static final int CMD_LEAVE=1005;//下线通知
	public static final int CMD_SHAKE=1006;//抖动
	public static final int CMD_ADDFRIEND=1007;//添加好友
	public static final int CMD_AGREE=1008;//同意添加为好友
	public static final int CMD_REJECT=1009;//拒绝添加好友
	//public static final int CMD_DELFRIEND=1010;//删除好友,该功能我没做-.-
	
	public static final String STATUS_ONLINE="在线";
	public static final String STATUS_OFFLINE="离线";
	public static final String STATUS_HIDDEN="隐身";
	public static final String STATUS_BUSY="忙碌";

	public static final String TYPE_FRIEND="好友";
	public static final String TYPE_FAMILY="家人";
	public static final String TYPE_CLASSMATE="同学";
	public static final String TYPE_BLACK="黑名单";
SendMsg消息类,所有的消息必须包装成此类才可以发送:
public class SendMsg implements Serializable{
	public int Cmd;//命令字
	public Account myAcc;//发送者
	public Account friendAcc;//接收者
	public StyledDocument doc;//发送内容
	public String sFileName;//发送文件的名字
	public Object[] b;//文件内容  (字节数组)
}
SendSocket类,只有一个send(SendMsg msg)方法,用来发送消息:
	public void send(SendMsg smg){
		//字节数组输出流
		try {
			ByteArrayOutputStream bos=new ByteArrayOutputStream();
			ObjectOutputStream oos=new ObjectOutputStream(bos);
			oos.writeObject(smg);
			byte[] b=bos.toByteArray();//网络传输总是要转成字节数组传送
			
			DatagramSocket socket=new DatagramSocket();
			InetAddress addr=InetAddress.getByName(smg.friendAcc.getIp());
			int port=smg.friendAcc.getPort();
			DatagramPacket p=new DatagramPacket(b, 0, b.length, addr, port);
			//发送
			socket.send(p);
			oos.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
Sound类构造函数用来播放好友上线提示音,这个不重要,只要是在好友上线时调用能放个音乐或者声响就行。

4、ht.ui主要的工作都在这个包中

Login类登录模块,账号下拉框保存已登陆过的账号,选择不同的账号显示对应的头像。注册账号按钮转到注册界面,找回密码,记住密码以及自动登录我没做,一周多的时间重复的类似的功能模块或者不重要的模块我都没做,认真的同学可以做。

               
Reg类注册模块,所有的信息与account的字段对应,QQ号跟端口号是getQQ与getPort随机产生的,严谨地说还要判断是否已存在,但我这里数据量才6个人,已存在的几率很小就没有写对应的方法去判断是否存在。


MainUI主界面,登录按钮跳转到该界面,包括4个分组,本人的头像与昵称,查找好友按钮,状态改变下拉栏。并且右键好友能够出现聊天、查看信息按钮。

                                   

ChatUI聊天窗口、FindUI查找好友界面、LookInfo查看资料界面、TipUI好友上线提醒窗口效果如下:

                   

总结

经过该项目的练习要掌握一个java项目的大致框架,数据库的基本使用,网络通信的简单实现,对于UI这部分只是为了做界面会用到不是重点,毕竟现在纯用java做UI的不多吧效果也没专业做UI 的工具漂亮。花半个月的时间练练手,让新手有点成就感,看了两个月的java也算是学着样子做出来了一个小小的项目。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值