一.设计任务书

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 存在的问题

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

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

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

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

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

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

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

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

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

  4. java远程监控系统代码_[源码和文档分享]基于JAVA的远程屏幕监控系统

    远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来的过程. ...

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

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

  6. java lr分析表建立程序_[源码和文档分享]基于Java实现的LR(1)分析法语法分析程序...

    一 需求分析 自行定义文法, 运用语法分析方法对输入语句进行语法分析并输出结果,加深对语法分析过程的理解. 二 程序设计 2.1 总体思路 此次实验使用java编写.程序读取输入的token序列(如i ...

  7. java模拟回合制游戏大小姐_[源码和文档分享]基于java的RPG回合制游戏

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

  8. 按照学号查找学生_[源码和文档分享]基于JAVA和MYSQL数据库的学生成绩管理系统...

    一.需求分析 本系统是学生成绩管理系统,所以应该做到可以录入学生成绩,修改学生成绩,删除学生成绩,查询学生成绩,以及最后的所有学生按照GPA排名. 本系统的数据来源期末考试成绩,用来实现录入,查询,修 ...

  9. java文件 记事本_[源码和文档分享]基于JAVA的记事本

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

最新文章

  1. GBDT和GNN结合,结果怎么样?
  2. 隐私泄露无孔不入?扫地机器人已成新型“窃听器”,小米Roborock“躺枪”
  3. 【Spring】Spring学习笔记-01-入门级实例
  4. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
  5. SpringBoot+Vue+Redis实现前后端分离的字典缓存机制
  6. 程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
  7. 帮设计师与工程师更好沟通的实用技巧
  8. dagride实现模糊查询
  9. 单元测试工具 Numega
  10. eclipse maven plugin 插件安装和配置
  11. Hyperledger Fabric的区块结构 交易结构
  12. Cplex的安装和使用实例
  13. Embarcadero® Delphi 10.3源码安装fastreport6
  14. 手机屏幕什么计算机,手机屏幕和电脑屏幕的区别
  15. LTE网络有关系统消息(MIB/SIB)深度解析
  16. 什么是国际物流专线?国际快递专线又是什么呢?
  17. linux查看用户名
  18. Android权限说明
  19. 【HAL库】HAL库STM32cubemx快速使用
  20. PE制作-002.UEFI和Legacy双启动之Legacy启动

热门文章

  1. 解决magento保存产品时耗时很长的问题
  2. Flutter 中的基本路由
  3. 3dContactPointAnnotationTool开发日志(三三)
  4. mvc:annotation-driven/
  5. 博客创办目的——————欢迎相互学习
  6. 特权同学笔记-榨干FPGA片上存储资源
  7. C语言经典算法100例-022-乒乓球比赛名单问题
  8. Day14作业 二、有两个List集合怎么取两个无重复的并集
  9. weblogic(CVE-2018-2628漏洞复现)
  10. App设计灵感之十二组精美的租车类App设计案例