一.设计任务书

1.1 设计任务

本文设计的是一个简单的即时通信软件,利用 Java Socket 进行点到点通信,其工作机制模仿即时通信软件的基本功能,已实现的功能有:

  • 客户端登录
  • 客户端退出
  • 群组成员之间传输文字或图片信息

该软件分为客户端与服务器端,客户端负责与服务器建立连接,且执行收发消息的操作,服务器端负责等待客户端连接并保存用户的昵称与客户端 Socket 的输出流的对应关系。

1.2 技术指标

本程序使用的是 TCP 协议实现的即时通信软件,程序是基于 Java 语言开发的,主要用到的技术有:

  • Socket 编程
  • 自定义协议

如果使用普通的方法来标记一条消息的结束,如换行符,那么程序就不易扩展,只能发送纯文本消息,所以需要自己定义一种消息的格式,并且我们还需要提供发送消息与解析消息的方法。

服务器端创建一个 ServerSocket,循环等待客户端的连接,每当有客户端连接,就获取到客户端的 Socket 对象,并将该对象交付给一个服务器端线程处理,服务器端线程会不断从 Socket 的输入流中解析出消息类型、长度及消息内容,然后根据类型执行不同的操作。

客户端与服务器建立连接,同时开启一个客户端线程接收服务器端发送的消息,客户端登录是向服务器发送一条登录命令,客户端向服务器发送一条消息首先需要包装成定义的消息格式,然后再发送给服务器。

不管是发送消息还是发送命令其实本质都是一条消息,向服务器发送的消息都必须按照定义的格式来。

1.3 论证结果

经论证,这个任务是可行的。TCP 协议的实现细节 Java Socket 已经帮我们做好了,我们需要做的是定义一个协议工具类,实现发送消息与接收消息的方法,然后客户端与服务器端都利用这两个方法来进行消息的发送与解析。

二.实现原理

2.1 基于 TCP 协议的即时通信

TCP 协议是一种端到端协议,当一台计算机要与远程的另一台计算机连接时,TCP 协议会让他们建立一个用于发送和接收数据的虚拟链路。TCP 要负责收集数据信息包,并将其按照适当的次序放好传送,接收端收到后再正确的还原,TCP协议使用了重发机制,当一个通信实体发送一个消息到另一个通信实体后,需要接收到另一个通信实体的确认消息,如果没有收到确认消息,则会重发消息。所以 TCP 协议保证了数据包在传输中不发生错误。通信示意图如图 1 所示。

在通信实体 1 与通信实体 2 建立虚拟链路前,必须有一方主动来接收其他通信实体的连接请求,作出“主动”的通信实体称为服务器,发出连接请求的通信实体称为客户机。

2.2 自定义协议的定义

2.2.1 通信原理

客户端与服务器端相互通信,首先要建立 Socket 连接,连接建立好后双方都会拿到一个 Socket 对象,通过 Socket 对象拿到输入、输出流可以实现写、读的功能。服务器端接收到客户端的连接,将客户端的 Socket 对象交付给一个线程,该线程负责维护该客户端,在线程体中需要使用死循环不断的获取客户端发给服务器的消息。

2.2.2 存在的问题

那么问题来了:怎么标志客户端发送的消息的结尾?如果不对结尾标志,服务器端将不知道客户端本次客户端发送的消息到哪里。

参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1371.html

转载于:https://www.cnblogs.com/ddgg5151/p/10091495.html

[源码和文档分享]基于JAVA的即时通信软件相关推荐

  1. 和java通信_[源码和文档分享]基于JAVA的即时通信软件

    一.设计任务书 1.1 设计任务 本文设计的是一个简单的即时通信软件,利用 Java Socket 进行点到点通信,其工作机制模仿即时通信软件的基本功能,已实现的功能有:客户端登录 客户端退出 群组成 ...

  2. [源码和文档分享]基于java 的仿QQ聊天工具

    一 需求分析 本系统是基于java开发的聊天室.有用户注册.用户登陆.修改密码.忘记密码.添加好友.用户聊天.群聊功能.如果服务器还没有启动,则客户端是不可以登陆.注册.忘记密码,如果在运行过程中,服 ...

  3. [源码和文档分享]基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  4. java rpg对战_[源码和文档分享]基于java的RPG回合制游戏

    一.工作积累总结 该项目是一个回合制RPG游戏,讲述了动物主角对抗人类,自逃出动物园开始,一路与人类对抗,提升能力,并寻找新队友组成团体,逼得人类不得不与之谈判,最终与人类达成了和平协议的故事.玩家可 ...

  5. java 仿qq庅_[源码和文档分享]基于java 的仿QQ聊天工具

    一 需求分析 本系统是基于java开发的聊天室.有用户注册.用户登陆.修改密码.忘记密码.添加好友.用户聊天.群聊功能.如果服务器还没有启动,则客户端是不可以登陆.注册.忘记密码,如果在运行过程中,服 ...

  6. java记事本技术参数_[源码和文档分享]基于JAVA的记事本

    一.绪论 现如今,电脑已经成为了每家每户甚至是每个人手头都必有的一种实用性工具,它改变了人们的生活,大大提高了人们的工作效率.在此基础上,电脑端的记事本应用一直是每台电脑所必备的实用性应用,不管是在台 ...

  7. [源码和文档分享]基于Java语言的电梯调度模拟程序

    一 需求分析 某一栋楼有20层,有5部互联的电梯.基于线程的思想,编写一个电梯调度程序.这五部电梯项目联结,即当一个电梯按钮按下去时,其它电梯相应按钮同时点亮,表示也按下去了. 二 程序设计 本项目采 ...

  8. 实验一基于 的词法分析实验_[源码和文档分享]基于JAVA实现的基于DFA的词法分析程序...

    1 实验目的 根据自己确定的正规表达式,编写.调试一个词法分析程序,对语句进行词法分析,从而更好理解词法分析原理. 2 内容描述 此程序用java编写.程序读取一个文本文件,并对其中的内容进行词法分析 ...

  9. [源码和文档分享]基于JAVA EE框架的在线考试系统平台的设计与实现

    在线考试系统以java作为开发语言,Struts2.Hibernate实现前后台数据管理,Spring实现业务逻辑管理,以MyEclipse作为开发工具,MySQL实现数据持久化,Tomcat部署整个 ...

最新文章

  1. 代码审计之代码执行注入
  2. linux之ubunt把启动栏底部和左边切换
  3. 如何使用Hibernate批处理INSERT和UPDATE语句
  4. 看这玩意复习你还会挂科?《网络原理篇》
  5. 基于消息的异步套接字
  6. 非线性优化库Ceres问题记录
  7. Linux之dirname与basename命令
  8. AndroidStudio配置gradle,让App自动签名
  9. SQLserver2008全文检索使用方法
  10. Linux bash基本介绍
  11. 优麒麟桌面闪烁_优麒麟 19.10 正式发布—百尺竿头,更进一步
  12. 中医预约挂号系统,代煎取药功能原来这样用?
  13. html flex上下居中,CSS3 Flex实现元素的水平居中和垂直居中
  14. 【TsinsenA1339】JZPLCM(顾昱洲) 树状数组
  15. HDU 2154:跳舞毯(递推)
  16. 高频信号发生器设计—电容三点式振荡电路
  17. 在线qq的html代码,网页QQ
  18. 另类解决部分黑苹果Monterey下蓝牙睡眠后启动异常缓慢的问题
  19. 微信每日定时推送消息新闻到群聊或朋友
  20. android gms go.mk,GMS_常见问题记录_1

热门文章

  1. 十大笔记本品牌型号命名规则【联想】
  2. c语言读取excel表格_利用pandas处理excel表格
  3. Android Handler的内存泄露场景分析
  4. mysql 单机_mysql单机多实例——方法1
  5. 我的内核学习笔记2:platform设备模型
  6. EXP-00011: XX.tab does not exist
  7. 【clickhouse】未解决 ClickHouse exception, code: 1002 DB::Exception: Directory already exists
  8. 【Elasticsearch】Elasticsearch 集群协调迎来新时代
  9. 95-36-032-ChannelHandler-SimpleChannelInboundHandler
  10. 【IDEA】IDEA报错 illegal character U+00A0异常解决