2、登录模块
用户在客户端输入账号和密码,然后建立与服务器端的连接,告诉服务器执行登录操作。服务器收到后,开始通过JDBC读取数据库,然后与用户输入的信息进行比对,如果成功,便打开主程序窗口。然后客户端向服务器请求读取好友列表,服务器收到该请求后从数据库中取出该用户的好友列表,然后向客户端发送这些信息,客户收到后就在主窗口显示好友。 用户登录流程图如图4-4:
开始填写用户信息验证用户信息成功验证用户失败接收离线信息发送登陆失败信息结束
图4-4 登录流程图
3、实时聊天模块
客户端首先发送消息到服务器端,服务器端程序判断客户端发来的信息类型,如果是普通的聊天消息就根据发送者信息和接受者信息进行消息转发。例如客户端A向客户端B发送消息的处理过程如下:首先A向服务器发送消息,服务器程序判断消息类型,如果是普通的聊天消息,则解析该消息,得到该消息的发送者A,接受者B。接着判断B是否在线,如果在线就将消息发送过去,否则将消息存入数据库。B接收到A发来的信息,如果是未建立对话窗口,则在屏幕右下角出现弹窗提示。 此外还有群组聊天功能,可以在“官方聊天室”功能中实现一对多的聊天,即在聊天室发送的消息是面向所有在线用户的。 用户聊天流程图如图4-5:
16
开始打开聊天窗口输入数据接收数据发送数据显示数据结束
图4-5 聊天流程图
4、系统后台管理模块
(1)系统服务:服务器端的管理员可以在这里启动后台的服务器,发布聊天室公告或者弹窗公告给所有在线用户。如果未开启服务器,则在客户端无法登录,并会返回相应的消息提示。
(2)用户管理:可以根据用户名或者用户ID查询已注册的用户详细信息,并且可以修改、保存相关信息。这是一个对数据库的简单的增删改查的操作。
17
第5章 系统详细设计与实现
5.1 系统设计与实现
本系统主要分为注册、登录、聊天、后台管理四大模块。 下面详细介绍各个模块的具体实现。 5.1.1 注册模块
正如我们使用的QQ一样,使用之前我们要申请一个QQ号。本系统虽然没有设计这么复杂的流程,但是也必须在登录前注册账号。只有后台数据库里存在的用户才能使用本系统。
注册界面如图5-1所示,填完消息点击注册即可。
图5-1 用户注册界面
此外,信息填写不完整或填写有误将有错误提示。此处调用了JOptionPane对象的showMessageDialog方法,通过设置该方法的参数显示不同类型的提示框。邮箱地址的检测用到了Java里面的正则表达式相关知识,使用Pattern对象对邮箱地址格式的正则式进行编译,再调用Matcher对象的matches方法判断用户输入的邮箱是否与该格式匹配。
18
注册完成后,通过JDBC技术连接MySQL数据库将记录插入数据库表中。 注册功能关键代码(注册成功窗口)代码如下:
private class RegSuccess extends JDialog implements ActionListener{ \
private JTextArea txtInfo = new JTextArea(); private JButton btnLogin = new JButton(\直接登录\private JButton btnReturn = new JButton(\返回登陆界面\private RegUser user;
public RegSuccess(RegUser user,Frame owner, boolean modal) {
super(owner,modal); this.user = user; setSize(250,190); setResizable(false);
Toolkit tk=Toolkit.getDefaultToolkit();
setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().heig
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnLogin){
dispose();
19
ht)/2);
setTitle(\注册信息\
txtInfo.setText(\恭喜!\注册成功!\\n\
\用户昵称:\\登陆号码:\\登陆密码:\\请妥善保管您的号码和密码!\
txtInfo.setEditable(false); txtInfo.setOpaque(true);
txtInfo.setBackground(this.getBackground()); txtInfo.setPreferredSize(new Dimension(200,100));
txtInfo.setBorder(new TitledBorder(new LineBorder(Color.DARK_GRAY),\注册信息 setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
btnLogin.addActionListener(this); btnReturn.addActionListener(this); add(txtInfo); add(btnLogin); add(btnReturn); setVisible(true);
RegisterPane.this.dispose(); new
MainPane(txtServerIP.getText(),Integer.parseInt(txtServerPort.getText()),user.getJqnum(),user.getPassword(),UserState.ONLINESTATE.getState());
} }
}
if(e.getSource()==btnReturn){ }
dispose();
RegisterPane.this.dispose(); new LoginPane();
网页上显示用户的注册账号信息,如图5-2:
图5-2 用户注册信息
5.1.2 登录模块
登录模块用于验证客户端用户的合法性,用户输入用户名和密码后通过Msg对象将其封装成客户端消息,通过ObjectInputStream对象写入socket流中传给服务器,服务器收到客户端传来的Msg对象后解析出用户名和密码并和数据库的记录比对,两者完全正确方可成功登录。在登录界面(如图5-3)验证通过则会进入客户端好友列表界面(如图5-4),否则弹出一个MessageDialog提示用户名或密码错误。
用户登录界面如图5-3所示:
20