java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)

Java团队课程设计-socket聊天室(Day4总结篇)

团队名称:

ChatRoom

项目git地址:

git提交记录(仅截取部分):

17b56eab9a0e3e0e4b504e0da8a3a763.png

c9d43c79cf9ac0908180f5bf416326da.png

面向对象设计包图、类图

包图

8a52b1e62d6468592e925905090e05c8.png

UML类图

3ded3bba4210501fed5cdf67ef3ecafb.png

总结:

首先总结一下这几天遇到的问题和解决方案

使用ObjectInputStream/ObjectOutputStream的时候不能直接进行传递,需要将传递的类进行序列化,例如:

72c43889f3ed066b2f2654ca7144f8f5.png

服务器对消息的转发,因为我们每一个客户端连接之后都有一个socket,所以转发只需要调用相对应的socket就能完成转发。

文件源路径问题,因为我们打算将项目打包成.exe文件,所以需要知道添加的资源的相对路径,使用getSource方法获取文件源,这个方法如果获取不到路径的话会直接报错,值得一提的是,你的文件路径编码格式应该与代码的编码格式一致,否则有可能获取不到路径而报错。

布局管理器无法控制组件大小,将布局管理器设置为null,直接用setBound方法根据x,y直接加入窗体。

重写鼠标方法能使画面更美观

b9755dcce95e86ed4f766e42375cf789.png

数据库需要动态查找,但是preparedStatement.setString();不能设置表的名字,所以在百度很久没有找到结果的情况下,我们使用字符串拼接,使用StringBuffer来代替preparedStatement.setString()的设置

关于文件转发,首先因为使用的是socket,socket使用的是阻塞式传输,所以传输的文件大小不宜过大,否则socket被占用其他的聊天信息就不能传递,我们设置的9*1024的byte数组,这样保证在传输文件之后不用太久就能继续聊天。

关于文件保存,文件被服务器转发之后就要询问是否保存,但是保存需要保存的文件名和地址,地址我们使用通用地址,一般为C:\Users\Administrator\Desktop,保存到桌面,不过我们的测试代码是放在D盘的,因为没有权限放在那边,不知道是否是因为个人原因还是代码问题,文件名使用发送方的文件名

0cac069a7303467525e3fce939200f66.png

2db71938901133b85045ea0351ed7c1f.png

5b9eea005bafbca5f10f8df5950060f0.png

遇到但是还没有解决的问题

注册成功之后,需要将整个客户端程序关闭再开启,但是查找许久也没有找到问题,也排除了数据库没有更新的这种可能,最后因为时间不够了就将这个BUG留到以后来修复了。

同样,登录成功之后退出登录也需要将整个程序关闭重新开启。

在发送文件的时候不能继续传递消息,因为socket是阻塞式,所以解决不了这个问题,只能换netty。

想做但是还没完成的功能

我们是想做好友系统的,具体思路也有,就是在数据库创建一个关于userName的好友列表,这样客户端就只能与好友列表的人进行通讯,但是由于时间问题,想做的时候因为是倒数第二天了,就搁置了。

最开始我们是有一个大的聊天室,就是所有人都可以在里面说话,但是后来发现这个没什么技术含量而且还不如直接私聊来的更好,我们就把这个功能砍了,后来想的是能不能自定义的几个群聊,意思就是说客户端可以拉几个人开启群聊,不过需要GUI大改,也是因为来不及所以就没做了,如果下个学期JavaWeb还想做这个的话就把上面这些解决。

阿里巴巴代码扫描插件idea版

扫描之后得到的警告

c1635064cd1a3a47c19df32103a6d63b.png

被警告的代码

5de278e7be2c451704dd60588ea9e7a6.png

解决后的代码

8cf75ab63cd4f0f3d5307dd0f9d791be.png

解决之后0警告

e1c975920fc9efad6e1595ff4c85a419.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础代码技巧_Python 代码优化技巧(二)

Python 是一种脚本语言,相比 C/C 这样的编译语言,在效率和性能方面存在一些不足,但是可以通过代码调整来提高代码的执行效率。本文整理一些代码优化技巧。 代码优化基本原则代码正常运行后优化。 很多人一开始写代码就奔着性能优化的目标&…

rpm 讲解

CentOS7主要有rpm和yum这两种包软件的管理。两种包的管理各有用处,其中主要区别是:YUM使用简单但需要联网,YUM会去网上的YUM包源去获取所需要的软件包。而RPM的需要的操作经度比较细,需要我们做的事情比较多。 软件包的安装和卸是…

java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...

冒泡排序就这么简单在我大一的时候自学c语言和数据结构,我当时就接触到了冒泡排序(当时使用的是C语言编写的)。现在大三了,想要在暑假找到一份实习的工作,又要回顾一下数据结构与算法的知识点了。排序对我们来说是一点也不陌生了,…

python 多线程和协程结合_如何让 python 处理速度翻倍?内含代码

阿里妹导读:作为在日常开发生产中非常实用的语言,有必要掌握一些python用法,比如爬虫、网络请求等场景,很是实用。但python是单线程的,如何提高python的处理速度,是一个很重要的问题,这个问题的…

python批量生成图_利用Python批量生成任意尺寸的图片

实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片。 效果如下:目录结构 实现示例 # -*- coding: utf-8 -*- import threading from PIL import Image image_size range(1, 1001) def start(): for…

Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引

1、索引是什么 1.1索引简介 索引是表的目录,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,以及快速定位查询数据。对于索引,会保存在额外的文件…

Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决

本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中。 什么是循环依赖?怎么检测循环依赖Spring怎么解决循环依赖Spring对于循环依赖无法解决的场景Spring解决循环依赖的方式我们…

Spring中bean的作用域与生命周期

在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bea…

Spring循环依赖的三种方式

引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。下面说一下Spring是如果解决循环依赖的。 第一种:构造器参数循环依赖 Spring容…

Spring 是如何解决循环依赖的?

1.由同事抛的一个问题开始 最近项目组的一个同事遇到了一个问题,问我的意见,一下子引起的我的兴趣,因为这个问题我也是第一次遇到。平时自认为对spring循环依赖问题还是比较了解的,直到遇到这个和后面的几个问题后,重…

java按钮触发另一个页面_前端跨页面通信,你知道哪些方法?

戳蓝字「前端技术优选」关注我们哦! 引言在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页…

【Java用法】java 8两个List集合取交集、并集、差集、去重并集

在业务的开发过程中会经常用到两个List集合相互取值的情况&#xff0c;于是记录在此&#xff0c;方便后续使用哦~~~ public class ListTest {public static void main(String[] args) {ArrayList<String> listA CollectionUtil.toList("a", "b", &…

jsonp react 获取返回值_Django+React全栈开发:文章列表

React现在我们有了一个属于文章的API&#xff0c;可以添加、修改、删除、查看文章&#xff0c;但是对于我们的网站来说&#xff0c;还需要一个用户界面才行。现在开始探索一下ReactJS吧。经常听到有前端三大框架Angular、React、Vue的说法&#xff0c;不过React官网对自己的介绍…

24个经典的MySQL索引问题,你都遇到过哪些?

1、什么是索引&#xff1f; 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分)&#xff0c;它们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xff0c;以协助快速查询、更新数…

java 3 4_Java-3/4_树.md at master · yrcDream/Java-3 · GitHub

树二叉树二叉树具有唯一根节点二叉树每个节点最多有两个孩子&#xff0c;最多有一个父亲二叉树具有天然递归结构二叉树不一定是 “满” 的&#xff1a;一个节点也是二叉树、空节点也是二叉树二叉搜索树(BST)BST 的基本功能public class BST> {private Node root;private int…

python模块导入_python模块导入

不同的执行方式&#xff1a; 从IDE中执行&#xff0c;python程序由IDE设置环境决定。 从系统中执行&#xff0c;python程序由环境变量中的系统变量path决定&#xff0c;从上往下选择。 模块导入顺序&#xff1a; 系统包优先级最高 > 同目录 > sys.path&#xff0c;之所以…

再也不怕SVN冲突:轻松解决SVN冲突

什么时候容易出现冲突&#xff1f; 多个人同时修改了同个文件中的同一行代码 无法进行对比的二进制文件&#xff0c;比如图片等 如何解决冲突&#xff1f; 如上图&#xff0c;test_conflict.py文件发生了冲突&#xff0c;并且多出了几个文件&#xff0c;其中.mine是我本地修…

手机型号大全_2020值得入手的三款手机。每个优秀,选择哪一个?励志故事名言视频...

如今&#xff0c;手机等数码产品更新很快。各种新的技能&#xff0c;让用户真正体验到科技的力量&#xff0c;它可以被描述为“具有多种功能的一个装置。”然而&#xff0c;这么多车型&#xff0c;难免有些人不知道如何选择。当4G和5G手机**的对峙&#xff0c;很多朋友也问小中…

AspectJ

Aspectj与Spring AOP比较 XML配置方式 <aop:aspect>&#xff1a; 定义切面, 包括通知和切点. 是一般的bean//定义切面 public class SleepHelperAspect{public void beforeSleep(){System.out.println("睡觉前要脱衣服&#xff01;");}public void afterSleep…

aixs1 生成java代码_通过axis1.4 来生成java客户端代码

1.首先下载axis-1.4所有的jar包&#xff0c;2.我是直接打开cmd&#xff0c;进入到该jar包的目录下&#xff0c;3.直接运行命令(运行这个命令之前要确定java的环境变量都已配置好)&#xff1a;java -Djava.ext.dirs${lib的目录} org.apache.axis.wsdl.WSDL2Java -o${代码输出路径…