即时通讯程序总结

前言

之前写了一个即时通讯桌面应用程序,使用JavaFX进行开发,使用socket来完成客户端之间的消息传递。做一下总结,程序写得比较简单,存在很多不够好的地方。
项目已上传,感兴趣的同学可以了解一下
项目地址: https://github.com/godelgnisEJW/IM

主要思路

我做的聊天程序有服务端和客户端。

  • 主要完成的功能有:用户登陆功能,普通消息发送功能(文字+emoji表情),文件传输功能,视频通信功能
  • 服务端主要负责客户端登陆时的信息验证和负责接受客户端的上线下线的状态消息,维护在线用户列表,并且向客户端更新在线用户列表消息。并且服务端还可以管理用户信息和在聊天大厅中聊天,充当管理员的角色。
  • 客户端需要与客户端之间一直维持着socket连接,如果连接断开,服务端会判定为用户下线,并且更新用户列表。客户端与客户端之间进行聊天时,所传递的消息不需要经过服务端,也就是说,此时的客户端相当与有一个内置的服务器,可以监听其他客户端发送的连接请求,并且使用该socket连接来完成通信。
  • 因此服务端程序只开放一个端口,而客户端启动时会使用一个随机端口,客户端登陆成功后会启动一个内置的服务器,客户端会把内置服务器的监听端口向服务端进行汇报登记,服务在更新在线用户列表时会把客户端相对应的内置服务器端口一并更新了。然后不用用户之间进行通信时,如果之前已经有用于通信的连接,那么就使用这个已存在的连接,如果是第一次与这个用户进行通信,那么就向这个用户的监听端口发起连接请求,然后进行通信。
    在这里插入图片描述
    使用这种方式,则客户端之间总的只需要3个socket连接即可实现客户端之间相互通信。如果不采用这种方式,每与一个新的用户通信就建立一个新的socket连接,那么就会多建立一倍的socket。

事件监听

我自定义了程序中的几个事件,分别是程序启动事件(需要完成程序初始化工作),程序关闭事件(需要完成程序的收尾工作,包括用户信息保存和临时文件的删除等),消息事件(需要进行消息分发)。
使用了观察者模式和中介者模式
在这里插入图片描述
在程序启动,程序关闭和接收到消息时,会分别产生相应事件类型的事件,触发事件分派器分派消息。事件处理器需要到事件分派器进行注册,处理相应的事件。其中EventDispatch既扮演观察者的角色,又扮演中介者的角色。

消息格式设计

以下是我设计的消息格式
在这里插入图片描述
格式比较简单,每条消息的第一个字节为这条消息的消息类型,然后接着的四个字节为消息内容的长度,紧接着的就是消息的内容了。客户端在接受消息的时候就可以按照固定的格式读取指定的字节内容,消息内容则根据4个字节的消息长度读取指定的字节数,这样就可以解决TCP消息无边界的问题了。
最初的消息格式的设计太过于简单,以至于后续要扩展消息格式时不好用,缺少参数的设置。。。
如果重新设计的话,我会设计成这样
在这里插入图片描述
这样设计的话消息就能带上参数,消息类型和内容的扩展会更加容易。

消息分发

在这里插入图片描述
消息的分发主要使用中介者模式,程序中定义的多个消息解析器需要在MessageDispatch进行注册。MessageDispatch在接收到消息事件时,会将接受到的消息进行分发,不同的消息类型有不同的解析方式。

界面

界面主要使用Scence Builder来完成,操作简便,可以快速完成界面的设计,有一点值得一提的是,在设计的时候我习惯用AnchorPane作为最底层的面板,该面板上的元素位置可以很容易地进行调整,而不像BorderPane或者StackPane那样,面板上元素的位置是固定的,不容易进行调整。

效果展示

服务端启动
客户端登录
发送文字消息
发送文件
视频功能就发几张图片好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

godelgnis
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Java创建即时通讯应用程序 - 一个实战教程
10-03
在这个实战博客中,我们将创建一个Java即时通讯应用程序,演示如何使用Java编程语言和通信库来实现聊天、语音通话和视频通话功能。 以下是本实战博客的主要内容: 项目概述 准备工作 创建Java项目 添加通信库 创建...
Java聊天应用程序 - 创建一个基本的即时聊天应用
10-03
创建一个基本的即时聊天应用程序是一个有趣而实用的项目。在这篇Java实战博客中,我们将详细介绍如何构建一个简单的聊天应用程序,包括以下内容: 项目概述 构建服务器端 构建客户端 实现消息传输 运行聊天应用程序...
即时通讯系统的体会
best show小组的专栏
05-11 226
昨天我们那个为期只有短暂三周的公司内部的及时聊天系统终于完成了。通过做这个小小的项目我学到了很多知识。首先如果你想要做一个好的一个项目,必须要有一个很好的美工,这是为什么啊?因为用户第一眼看的就是你这个软件的界面。如果你的界面做的很丑,用户肯定没兴趣看下去了。so,即使你的程序的功能做的非常完美也白费心思了。其次:团队对于开发一个项目来说是很必要的。即使你有很强的技术,你也只...
总结】学习Socket编写的聊天室小程序
weixin_34248487的博客
08-27 184
1.前言 在学习Socket之前,先来学习点网络相关的知识吧,自己学习过程中的一些总结Socket是一门很高深的学问,本文只是Socket一些最基础的东西,大神请自觉绕路。 传输协议 TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。 特点: 面向连接...
在线聊天系统总结
yan_dan的博客
08-26 2859
1.需要保存的变量,不同方法中都要用到的变量一般设置成成员变量以方便引用。 2.流中的一些方法接受(),的readUTF,wirteUTF()都是阻塞式方法,等到读到为止。 3.Exception的处理也是程序正常执行的一部分,只不过这个是比较特殊的异常处理。并不是说这是一个错误,而是一个特殊情形。 4.当接口(接口)实现了自己的方法,那么他就可以当作是一个类来实例化。按钮监听器中的Acti...
聊天室项目文档总结
changke的博客
09-02 3508
项目概况 该项目是学习完linuxC网络编程后,是对暑假留校所学知识的综合应用实例。 项目参考文档: 一.LinuxC编程实战 主要参考本书文件系统编程,线程同步,基于tcp/ip协议的网络编程方面的知识 二.C prime plus 对于里面的一些文件操作,链表,函数指针等操作进行了回顾。 三.软工课设发的用宏函数封装的双向链表各种操作头文件list.h(屡试不爽) 四.百...
JAVA聊天程序经验总结(未完待续)
u011028043的专栏
08-24 802
1、在Debug客户端程序的时候,莫名其妙出现了ClassNotFoundException,在网上百度,似乎百度出来的解决方案的问题矛头指向的都是底层实现,不是我一个人能够解决的,所以问题肯定不是出在这,看了很久才发现,客户端底部finally语句块内有socket.close()语句,这样一来客户端和服务器端只完成了一次通信就被关闭,socket链接通道已经不存在,所以才会抛出ClassNot
基于Java聊天室的socket设计和实现(论文+程序设计源码+数据库文件)
06-09
1.绪论 4 1.1研究背景 4 1.2发展现状 4 1.3主要的内容 5 2.开发工具及相关技术介绍 6 2.1 开发工具 6 2.2 Java的介绍及背景 6 2.3 TCP/IP协议的介绍 6 2.4 Socket的介绍 6 3. 需求分析 7 ...7总结 17 致谢 19
系统架构师考试知识点总结
05-10
特征有即时响应、高可靠性。 4、网络:按网络架构的各个协议标准制订,包括网络管理、通信、资源共享、系统安全和多种网络应用,实现协同工作和应用集成。特征有互操作性、协作处理。 5、分布式:要求一个统一的操作...
Android几种消息推送方案总结
01-05
它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者它可能是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息)。GCM服务处理排队的消息,并把消息...
基于android的即时通讯软件(含报告)
05-24
这是一款android即时通讯软件,基于XMPP传输协议,使用openfire本地服务器进行连接,与spark客户端进行通讯。该软件实现了登录,对话,增删联系人,显示联系人状态等功能。在openfire服务器中创建用户后,两个用户相连接,通过点对点的方式进行来发送消息。
JavaFx WeChat聊天软件服务端
01-26
一个聊天软件服务端,使用JAVAFX来做界面,实现的功能有登入注册,找回密码,更改头像,发送接收消息,查看好友资料,修改好友备注,好友是否在线的提示,消息的提示,气泡的大小自动改变,标为已读未读,清除聊天记录,删除好友,添加好友,搜索好友,好友备注,个人资料的修改查看,设置,聊天助手的提示,右键菜单等功能
基于Tomcat7、Java、Ext、WebSocket聊天
08-01
项目可以直接导入,一个基于Tomcat7、Java、Ext、WebSocket聊天室,分数是3分,目的不是为了赚分,是为了大家能够评论,提出意见。
Java模拟QQ实现即时通信
01-09
JavaQQ程序是通过多线程实现了一个服务器同时与多个客户机通信的程序。 Server类实现当程序开始运行时,会把相应的端口port设置为服务器。并让其处于待连接状态。每当有客户机连接上来时,就实例化一个线程类(ServerThread)对象,并启动一个线程去处理。(也就相当于我们为每个用户提供了一个独立的线程)。客户端类。 1.服务器和客户机的连接。其实在验证用户名和密码之前,客户机就已经和服务器连接上了。如果没有连接,是无法把用户名和密码送给服务器进行验证的。只是当验证完用户信息后,如果发现这个用户名不存在或者密码不正确时,再去断开客户机和服务器的连接。
聊天程序文件传输调试总结
YEYUANGEN的专栏
09-27 1016
===============================================               聊天程序文件传输调试总结 =============================================== 1)字符串是不能直接相互
iOS之即时通讯相关理解
weixin_30642029的博客
04-12 487
Socket: 1>Socket又称"套接字” 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 3>应用程序通常通过"套接字"向网络发出请求或者应答网络请求 网络通信的要素: 1>网络上的请求就是通过Socket来建立连接然后互相通信 2>IP地址(网络上主机设备的唯一标识) 3>端口号(定...
企业内部即时通讯系统项目总结
tulunta
06-18 255
这学期学习Java高级,最后有个Java课程设计,要求我们做个即时通讯系统。首先,说说这个即时通讯系统吧,说白了就是盗版QQ,但是盗版又要有模有样嘛,腾讯素来以“盗版”著称,别的公司有什么新功能,产品有什么新功能,帝国总能做个像模像样的出来,最终得到的收益也不菲。这不仅取决于帝国的庞大用户,还取决于别人的技术确实牛,模仿得确实到位。 好了,吐槽就到此为止吧,说说咱们自己的。 ...
即时通讯程序(socket 编程基础)
我不做咸鱼
10-14 1046
这两天接触了javasocket编程,现在做一下总结:
即时通讯软件的整理与心得
1024350154--lj博客
08-12 693
netty适合即时通讯
最新发布
12-30
Netty是一个高性能的网络编程框架,它提供了异步、事件驱动的网络应用程序开发模型。...总结来说,Netty是一个强大的网络编程框架,具有高性能、可扩展性和丰富的协议支持,非常适合用于开发即时通讯系统。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • break能跳出几层 26788
  • 词法分析器 Java完整代码版 20717
  • Spring Boot中@ApiModel注解不起作用 14943
  • springboot前后端时间传输,@JsonFormat 得到时分秒为00:00:00,拿不到时分秒 解决办法 14885
  • Spring Boot整合Vue,解决静态资源映射,页面刷新失效,路径配置等问题 14071

分类专栏

  • 编译原理 6篇
  • 笔记

最新评论

  • 使用Docker搭建Flink集群

    ZeroRains: 官方的例子是指一台机器启动多个container还是多个机器分别启动一个container?

  • docker Zookeeper集群正常启动,查看状态 Error contacting service. It is probably not running.

    erxiaoouba: 怎么才能知道哪个是leader呢

  • 使用Docker搭建Flink集群

    Hdd会得多-: totalTaskSlots是在flink-conf.yaml文件里设置对吗,为什么我的总是修改不了,重启容器后就会变成1

  • 异步获取数据后,v-for重新渲染图片列表,用this.$nextTick()解决

    肖焱午: 这是亿点点细节表情包

  • springboot前后端时间传输,@JsonFormat 得到时分秒为00:00:00,拿不到时分秒 解决办法

    L_KingC: 请问找到原因了吗

大家在看

  • C++学习/复习9--string的使用/迭代器/查找遍历修改转换容量等函数与重载运算符(建议记常用的)/练习
  • 基于卡尔曼滤波的储能电池荷电状态SOC估计研究(Matlab代码实现)
  • 3步操作助您轻松实现苹果手机照片一键传输至电脑 279
  • Redis 击穿、穿透、雪崩产生原因以及解决思路 410
  • 分布式任务调度内的 MySQL 分页查询优化

最新文章

  • Flink 通过Web UI 提交任务
  • 使用Docker搭建Flink集群
  • docker Zookeeper集群正常启动,查看状态 Error contacting service. It is probably not running.
2020年3篇
2019年15篇
2018年16篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司拉萨网站优化推广价格荷坳英文网站建设价格保定网站建设设计报价塔城优化哪家好大芬网络推广哪家好阜阳百度网站优化排名多少钱鹤岗网站改版哪家好和田外贸网站制作报价驻马店外贸网站设计哪家好宝安设计网站烟台关键词排名包年推广哪家好日照seo排名推荐吉安外贸网站制作多少钱拉萨建网站价格吉林如何制作网站哪家好吉安阿里店铺托管推荐滨州建站推荐吴忠模板制作多少钱延边百度爱采购哪家好镇江关键词按天计费公司遂宁网络广告推广价格成都英文网站建设价格济南网站优化按天计费南平网站搭建报价眉山网站搭建公司承德网站seo优化多少钱银川网络广告推广公司文山seo网站推广多少钱南联网站优化价格黄冈高端网站设计报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化