JAVA版TCP聊天室(简易版)(二)
背景
这段时间在自学java,前两天刚好学到tcp通信部分,通过学习写了个非常捡漏的聊天室。
今天的内容是对之前版本进行的升级
技术运用
此版本在上个版本的基础上加上了线程的运用,实现了1对多(一个服务器连接多个客户端)
线程内部使用循环实现连续多次发送信息(之前的版本是客户端发送完信息后必须等服务器回复后才能继续发送信息)
锦上添花的趣味点
1、客户端启用后实现简单的界面,以及选择项(界面通过println实现)
2、实现用户注册,要加入聊天室必须先注册登录
3、登录验证功能,无账号的需要先注册,登录时会对账号/密码进行验证
4、客户端连接服务器失败时会进行重连,重连3次依然失败则会退出程序
5、用户加入聊天室/退出聊天室在服务器端会有相应的提示
正文
login:验证登录
read_thread:读取信息操作线程
registe:注册
tcp_client:客户端
tcp_service:服务端
view:打印界面
write_thread:发送数据操作线程
1、
启动服务器监听 8888端口
2、启动view进行注册登录以及服务器连接
view部分代码,其实就是客户端主程序的入口,主要是三部分…
1、注册
2、登录(登录成功时会去连接服务器)
3、退出
实现了多个客户端的接入,这里我用了telnet来进行连接模拟
同时服务器端也实现了客户机接入与退出的提示
步骤总结
1、服务器是相对独立的,写完代码启动放在那就行,主要是调用读写线程,这里可能还有点bug暂时先不管了,主要思想:通过线程技术,每当有客户端连接上服务器时,服务器就将该客户端的socket传递给线程并启动该线程,这样就能实现一个服务器连接多个客户端
2、view主程序部分,界面打印就不说了,主要是调用客户端部分。调用客户端连接服务器,这个部分也没有难的无非是通过几个判断将启动服务端接入到界面中而已。
3、服务端调用线程:服务端连接上客户端后会创建socket、inputstream、outputstream,然后赋值给读、写线程,也就是当客户端连接上服务器后会直接创建两个线程,一个读数据的线程,一个发送数据的线程。
以上就是主要内容了
写在最后
这个版本基本上将主要的功能已经实现了,当然需要完善的地方还很多,接下来可能会做的部分:
1、实现服务器转发消息功能(实现多个客户端之间的互相聊天)
2、登录注册部分由于目前是通过本地的hashmap实现所以多个客户端都是全新的hashmap无法做到真正的注册,登录验证,后续实现数据库连接
以上两个功能实现后那么这个聊天室基本上就结束了,当然代码部分,语法等还有不少问题,后面再慢慢提升,加油!!!
ps:大饼是java初学者,本文适合跟大饼差不多的初学者来学习阅读,当然欢迎大佬指点,传授绝学!!!