基于java语言的网络聊天系统开发与实现毕业论文内容摘要:

对来获取指定的虚拟服务器,然后再进行后续的操作。 该类实现了 Runnable 接口,该接口是将线程所运行的程序代码提取出来 封装 成为 一个对象。 Runnable 对象可以用来创建线程。 private User user = null。 //虚拟服务器所服务的用户 @Override public void run() { Boolean b = true。 //线程结束控制符 //接收 来自客户端封装的消息对象 Message msg = null。 while(b) { try { msg = (Message)()。 //客户端 Client发送过来的消息对象 //根据消息的类型进行不同的处理 if(() == 10) {//登录验证操作 Message returnMsg = new Login().validate(())。 //登录验证 if(() == 13) { 商丘师范学 院 2020 届 本科毕业论文(设计) 7 //验证成功,则将该虚拟服务器添加到 主 服务器管理 的 虚拟服务器 列表 ().put(().getAccount(), this)。 } send(returnMsg)。 }else if(() == 20) {//转发聊天消息 ().get(().getAccount()).send(msg)。 send(msg)。 }else if(() == 30) {//退出操作 ().remove(())。 ().interrupt()。 //结束当前线程 }else if(() == 40) {//邀请好友进行游戏 ().get(().getAccount()).send(msg)。 }else if(() == 41) {//好友同意游戏邀请,双方开始游戏 Message m = new Message()。 (42)。 (())。 ().get(().getAccount()).send(m)。 (())。 send(m)。 }else if(() == 43) {//拒绝好友的游戏邀请 ().get(().getAccount()).send(msg)。 }else if(() == 44) {//由 获胜方通知失败方,胜负情况 ().get(().getAccount()).send(msg)。 } } catch (Exception e){ //异常处理 b = false。 //如果出现异常则修改线程终止符,使线程结束。 } } } 从源码中可以看出,虚拟服务器主要的工作,就是解析消息的类型,并根据消息的类型进行相应的处理。 例如在消息的类型为 10时,虚拟服务器就调用登录验证 Logon来对用户的信息进行验证,根据登录验证的验证结果,再返回相应的消息 给客户端的 Client。 登录验证 Logon private static UserDao userDao = new UserDao()。 //调用底层的 用户数据 访问功能 public Message validate(User user) { Message msg = new Message()。 //返回验证的结果信息 User u = (())。 //账户存在 if(u == null) {//账户不存在 (11)。 (账户不存在。 )。 }else{//该账户存在 u = ((), ())。 if(u == null){ //密码不对 (12)。 (密码不对。 )。 }else{//账户、密码正确 if(().get(()) == null) {//可以登陆 商丘师范学 院 2020 届 本科毕业论文(设计) 8 (13)。 (u)。 }else{//已登录 (14)。 (不能重复登录。 )。 } } } return msg。 }} 登录验证,主要分为三步 : ,即该账号是否存在。 只有账号存在才会进行后续的验证。 ,再验证密码是否与账号匹配,如果匹配成功,则返回该用户的信息。 ,对于已登录的用户则不再给予登录操作。 Hibernate 配置文件 访问数据的操作 要借助 Hibernate 框架来完成。 使用 了 Hibernate,我们就可以不用再写很复杂繁琐的 JDBC 语句去 建立与 数据库的连接,而将这些操作全都交给 Hibernate 来完成。 Hibernate 的配置文件如下 : sessionfactory !—在控制台打印出 执行 数据访问 的 SQL语句 property name=show_sqltrue/property !—连接 数据库所使用的驱动程序 property name=/property ! 连接数据库的地址 property name=jdbc: property name=root/property property name=846255/property ! 数据库的方言,该方言用于对数据库 的 操作进行解释 property name=/property !—开启数据库定义语言,用于自动创建表结构 property name=create/property ! 映射的实体类 mapping class = / mapping class = / /sessionfactory/hibernateconfiguration Hibernate 会话工厂 在完成了配置之后,为了可以使用它来进行数据的操作 ,我们 需要先创建会话工厂 , 因为数据的操作是基于会话的。 会话工厂的代码如下: public class Hibernate { private static SessionFactory sf = null。 //会话工厂 private static Session session = null。 static { Configuration cf = new Configuration()。 ()。 //在 默认路径下 , 读取配置文件。 ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(()).build()。 商丘师范学 院 2020 届 本科毕业论文(设计) 9 sf = (sr)。 session = ()。 } private Hibernate() {} public static SessionFactory getSessionFactory() {return sf。 } public static Session getSession() {return session。 } } 这里的会话工厂 SessionFactory 使用的是 Java 设计模式中 的单例模式,唯一的 SessionFactory 对象能够保证数据操作的可控性,让我们能够 利用 事务有效的 保证 被操作数据的一致性。 在配置文件中罗列出了所使用的实体类, 通过 在实体类中 使用 相应的注解标明, Hibernate 就可以将一个实体类映射为一张表,而实体类的属性则将映射为表 中 的字段。 实体类就相当于一张表,为了操纵 它 ,我为实体类 分别 写了一个操作 类。 利用会话 Session 来实现数据的增删改查。 数据操作类 UserDao public class UserDao { private Session session = null。 public UserDao() {session = ()。 }//获取会话 public User findByAccount(Integer account) {//根据账号来查询用户 Criteria c = ()。 ((account, account))。 User user = (User)()。 return user。 } //根据账号和密码来查询用户 public User findByAccountAndPassword(Integer account, String password) { Criteria c = ()。 ((account, account))。 ((password, password))。 User user = (User)()。 return user。 } //查询全部用户 public ListUser queryAll() { Criteria c = ()。 @SuppressWarnings(unchecked) ListUser users = ()。 return users。 } } 商丘师范学 院 2020 届 本科毕业论文(设计) 10 数据操作类 CrowdDao public class CrowdDao {//群组数据访问层 private Session session = null。 public CrowdDao() {session = ()。 } public void save(Crowd crowd) {//保存群组 Transaction transaction = ()。 (crowd)。 ()。 } public void update(Crowd crowd) {//更新群组 Transaction transaction = ()。 (crowd)。 ()。 } public void delete(Crowd crowd) {//删除群组 Transaction transaction = ()。 (crowd)。 ()。 } } 以上两个数据访问类都使用了基于 Criteria 的查询 方式。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。