多线程字典系统实现
首先说明下该系统可以实现的功能,小白都可以!!!!
该博客只提供学习和实现的思路,如果需要详细的代码,请留言!!!
1 具体要求
简单来说,就是实现服务器端和客户端,可以做到多个客户端并发对字典中的数据进行操作,但是不考虑跨局域网的情况,但是我稍后的文章会介绍一个跨局域网多线程系统的实现。
1.需要实现客户端和服务器端 Socket
2.实现多用户并发执行字典查询等操作 Thread类/Runnable接口
3.使用了TCP/UDP协议,因为想要保证数据的可靠性,我选择了TCP
4.数据的存储可以使用txt文件,但是我这里使用的是MySQL数据库
5.可以添加线程池的功能,也就是用来控制服务器端可以处理的线程数。因为要求我不能使用现成的类库,但是有需要的同学可以自己添加。
6.GUI使用的是java的swing库。
2. 设计思路
我会详细的描述下我的思路,但是我不会提供具体的代码,如果有代码的需要,请留言或者私聊联系:
为了完成这个任务,我们需要具体一些知识,刚开始学习的同学,可能会觉得很混乱,不是该干什么。
1. 需要了解java中Thread类或者Runnable接口如何使用
这里只需要知道thread和runnable如何使用就可以,都是最基本的函数。网上文章一堆。
2. 需要知道java如何实现TCP实现,我之前写过一个文章(代码详解),不会的可以采纳:「java」TCP编程
但是我在这里也简单的提下TCP的实现
首先对于server来说,它需要开放一个port来监听,是否有client的请求。当server开启后,这个端口就会在服务器一端开启,开始等待。也就是下面这句代码,这个是服务器自己定义的。
ServerSocket serverSocket =new ServerSocket(port);
如果client需要连接,那么就需要对这个port传输request。接下啦,如果有client发出,请求,server就会使用下面的语句知道,然后开始处理。
socketClient=serverSocket.accept();
然后server就可以使用socketClient来接收client的信息,并且向client写入信息。
这里信息的传递,可以自定义,比如json等,我使用的是BufferedReader。
下面说一下client部分,client需要使用socket来连接sever,显而易见的两个参数是serverIP(address)和serverPort。
Socket socket = new Socket(serverIp, serverPort);
只要服务器和客户端都正常运行,二者已经建立了联系,可以传输数据了,传输方式和上文的一样。
也就是说1.2 都完成后,基本并发的tcp通讯已经搭建好了。下面就是前端和数据库了
3.数据存储
本地txt文件和mysql数据都可。
txt文件就是需要常规的java读取。然后找到适当的数据结构存储就可以了。
mysql数据库就是导入包,然后写sql语句的”增,删,改,查“就可以了。写sql语句需要写正确。
使用文件的话,需要自己写锁哈。但是使用数据库不用,因为mysql自带锁的机制。
如果都是在一个机子上跑的话,都可以哈。
4. GUI的设计需要swing类
前端界面就是swing就可以了,没写过的,百度搜swing的GUI实现例子,学会基本的变量和监控怎么写就可以。
5. 这些知识都具备了就可以整合到一起了,然后调bug了。
前端和后端怎么整合哈?
第一件事,就是怎么传数据
就是GUI界面给的是一个按钮,但是没有给功能,我们相当于把功能加上。
就本题来说,肯定需要几个按钮:查询,添加,删除
也就是使用该按钮的监控,监测到哪个按钮被点击了,就传输相应的指令给server。
server需要在run中自己识别哈,然后去对数据库进行相应的操作。
然后把得到的结果在传输回客户端。
客户端需要显示结果(有的时候是显示一条结果,有的是需要显示历史结果,也就是全部的结果)
显示一条的很简单,接受到就显示,在while中等着接受下一条就可以了。
如果是写历史记录的话,两种,点击按钮获取历史记录,和自动在屏幕上就一条条显示略有不同,
第一种,使用一个数据结构,存储每次的string就可以了。两条为一组,一条request,一条result。
第二种,就是可以不用数据结构,直接往string后面加就可以,然后一直显示同一个string。
3. 类图
下面是我程序的一个类图,但是因为我界面登陆的时候有数据库验证,因此在server的时候多了一个验证,operation的参数也比较多,正常不需要这么多。
同时我还使用了线程池限制client的数量。