当前位置: 首页 > news >正文

不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信

前言

熬了一晚上硬是磨出来了,更新到了GitHub上,善存一些小BUG,不过这个版本的整体功能算是实现了。

项目:UncleCatMySelf/InChat

地址:https://github.com/UncleCatMy...

双端口,TCP/IP软硬件通信、Web端通信聊天应用

文字、图片聊天

流程图

磨了两天的Netty,因项目需要所以在整改一些东西,具体就不细说了,刚刚好和这个项目相似就拿来练练手·······

先看看流程图(我啥时候能画出好一点的架构图呢?)
图片描述

详解

先说TCP/IP软硬件通信吧,这个相对容易理解,也是图的右侧,加一个Handler去获取数据,硬件和服务器有对应的协议,我这边的协议是帧头+ID+控制类型+数据+加密+帧尾,得到正确数据既连接为正常的,那就保持正常通信,否则一律杀死连接。控制类型我写得比较粗糙,用switch,中间可能有数据的CRUD操作等,使用ScheduledFuture起一个新线程去执行原生的JDBC,后面可以改为异步执行(如果不需要实时的话,那就可以用JPA注入了。)

图片描述

图片描述

接着是聊天应用的通信,还是一个自定义的Handler不过是Object,具体后面可以使用instanceof去做判断,对于TextWebSocket类型的就做普通的文字聊天处理,而WebSocketFrame且同时也是BinaryWebSocketFrame的就做图片处理,你可以直接返回给客户端,也可以保存到本地,如果返回客户端的话,对于ByteBuf而言需要加一个retain()方法,不然会报错的。

图片描述

图片描述

预留BUG

其余的就是可能善存的一些BUG了

io.netty.handler.codec.CorruptedFrameException: Max frame length of 65536 has been exceeded.
图片过大,需要在前端做图片上传压缩

Uncaught TypeError: msg.substring is not a function at WebSocket.socket.onmessage (newChat.js:38)
前端代码的一点问题,不影响项目正常运行

java.io.IOException: 远程主机强迫关闭了一个现有的连接。
TCP客户端连接主动关闭,不影响,良性报错

效果

效果在上面的视频看到了!!!(请移步公众号,这里给图片)
图片描述图片描述
图片描述图片描述图片描述

图片描述

图片描述

还不去Star 然后自己泡一下?

地址:https://github.com/UncleCatMy...

项目名:UncleCatMySelf/InChat


如果本文对你有所帮助,欢迎关注本人技术公众号,谢谢。
图片描述

相关文章:

  • canvas练习 - 七巧板绘制
  • WPF 一个弧形手势提示动画
  • day11 高阶函数 函数式编程
  • dubbo-consumer
  • echarts 与 百度地图bmap结合系列: 如何设置地图缩放级别和监听缩放事件
  • 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
  • python3笔记一基础语法
  • DES/3DES(TripleDES)加密、解密测试数据
  • centos7源码安装lamp(新)
  • nginx set变量后lua无法改值
  • RabbitMQ Performance Testing Tool 性能测试工具
  • Perl检查引用类型
  • 网络七层协议
  • django中获得当前域名
  • Java编程基础24——递归练习
  • [Vue CLI 3] 配置解析之 css.extract
  • Android开源项目规范总结
  • Angular Elements 及其运作原理
  • Consul Config 使用Git做版本控制的实现
  • JAVA并发编程--1.基础概念
  • js作用域和this的理解
  • mac修复ab及siege安装
  • miaov-React 最佳入门
  • OSS Web直传 (文件图片)
  • pdf文件如何在线转换为jpg图片
  • SpiderData 2019年2月16日 DApp数据排行榜
  • spring-boot List转Page
  • 简单实现一个textarea自适应高度
  • 全栈开发——Linux
  • 入门到放弃node系列之Hello Word篇
  • 探索 JS 中的模块化
  • 写代码的正确姿势
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 移动端解决方案学习记录
  • 阿里云重庆大学大数据训练营落地分享
  • 第二十章:异步和文件I/O.(二十三)
  • 选择阿里云数据库HBase版十大理由
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $.each()与$(selector).each()
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)(1.13) SiK无线电高级配置(五)
  • (C#)获取字符编码的类
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (三)uboot源码分析
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Neo4j下载安装以及初次使用
  • .dwp和.webpart的区别
  • .form文件_一篇文章学会文件上传
  • /etc/shadow字段详解
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • []我的函数库