前一阵子在网上看了很多文章,学习了Mybatis框架,自己写了个含有5个功能的聊天程序 (1)登录,注册 (2)上下线通知(数据库中包含的用户上线后,广播通知给已经在线的用户) (3)消息转发,实现用户之间的聊天 (4)留言 (5)用户自己退出,或异常退出,服务端不报异常
我的实现 1.登录注册 (1)登录需要检索数据库中的用户,密码成功则登陆成功,密码错误则重新登录 (2)注册需检索已存在的用户,若已经存在注册的用户名,则需要重新注册,若不存在,注册成功 (3)JSON字符串的使用 (4)mybatis的使用,连接数据库,检索 相关代码: 客户端:
服务端:
2.上下线通知 当有用户成功登录后,将用户存放在一个Map表中,每当有用户上线,遍历map表,将用户上线消息发送给每个客户端 服务端:
3.消息转发 若输入框有消息,则询问消息发送给谁,遍历map表,用户存在则发送给相应的socket。 客户端: 服务端:
4.留言: 若输入框有消息,则询问消息发送给谁,遍历map表,用户存在则发送给相应的socket。若不存在,将相应的留言消息,和用户名存入map2,若离线用户上线,发送相应的留言消息,上线用户即可接受留言消息 服务端:
5.退出 输入bye则用户下线,广播通知所有在线用户,若为异常退出,服务端接受异常下线消息 服务端: 正常下线:
异常下线:
总结: 这个小项目耗时3天: 最初使用jdbc连接数据库,后来了解到Mybatis,则修改了部分代码。 遇到了很多问题: (1)经常在PRintWrite 后的参数忘记加true 没有刷新,客户端怎么都接受不到消息 (2)这个程序后来修改为NIO,则运用到了缓存区:发现接收到的JSON字符串格式不对,原来缓存区不会清空,后来解决了 还有很多小问题,都解决了,这个是第一个自己做的完整的程序,完成的过程中,熟练了IO,和NIO,明白了缓存区,通道等含义
欢迎大家提出问题,一起进步! 准备着手学习javaweb,去看书了~~~
新闻热点
疑难解答