多线程实现字典系统(server+client)

                                   多线程字典系统实现

首先说明下该系统可以实现的功能,小白都可以!!!!

该博客只提供学习和实现的思路,如果需要详细的代码,请留言!!!

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的数量。

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值