Socket粘包问题的3种解决方案,最后一种最完美!(1)

简介: Socket粘包问题的3种解决方案,最后一种最完美!(1)

在  Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议,但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘包和半包问题,于是为了彻底的解决此问题,便诞生了此篇文章。


什么是 TCP 协议?


TCP 全称是 Transmission Control Protocol(传输控制协议),它由 IETF 的 RFC 793 定义,是一种面向连接的点对点的传输层通信协议。


TCP 通过使用序列号和确认消息,从发送节点提供有关传输到目标节点的数据包的传递的信息。TCP 确保数据的可靠性,端到端传递,重新排序和重传,直到达到超时条件或接收到数据包的确认为止。


微信图片_20220120153557.jpg

TCP 是 Internet 上最常用的协议,它也是实现 HTTP(HTTP 1.0/HTTP 2.0)通讯的基础,当我们在浏览器中请求网页时,计算机会将 TCP 数据包发送到 Web 服务器的地址,要求它将网页返还给我们,Web 服务器通过发送 TCP 数据包流进行响应,然后浏览器将这些数据包缝合在一起以形成网页。


TCP 的全部意义在于它的可靠性,它通过对数据包编号来对其进行排序,而且它会通过让服务器将响应发送回浏览器说“已收到”来进行错误检查,因此在传输过程中不会丢失或破坏任何数据。


目前市场上主流的 HTTP 协议使用的版本是 HTTP/1.1,如下图所示:


微信图片_20220120153616.jpg


什么是粘包和半包问题?


粘包问题是指当发送两条消息时,比如发送了 ABC 和 DEF,但另一端接收到的却是 ABCD,像这种一次性读取了两条数据的情况就叫做粘包(正常情况应该是一条一条读取的)。


微信图片_20220120153633.jpg


半包问题是指,当发送的消息是 ABC 时,另一端却接收到的是 AB 和 C 两条信息,像这种情况就叫做半包。


微信图片_20220120153651.jpg

相关文章
|
6月前
|
监控 网络协议 iOS开发
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
210 0
|
6月前
|
监控 网络协议 数据安全/隐私保护
手机socket套接字75秒超时问题及解决方案
手机socket套接字75秒超时问题及解决方案
86 0
|
6月前
|
XML JSON 网络协议
Socket实现模拟TCP通信粘包问题
Socket实现模拟TCP通信粘包问题
|
网络协议 网络安全
python-- socket 粘包、实现 ssh
python-- socket 粘包、实现 ssh
|
存储 缓存 网络协议
Socket 如何处理粘包
Socket 如何处理粘包
81 0
|
关系型数据库 MySQL
【技术分享】Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘解决方案
【技术分享】Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘解决方案
215 0
【技术分享】Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘解决方案
|
网络协议 图形学
Socket TCP协议解决粘包、半包问题的三种解决方案
Socket TCP协议解决粘包、半包问题的三种解决方案
319 2
Socket TCP协议解决粘包、半包问题的三种解决方案
|
存储 缓存 网络协议
Windows技术篇——Socket粘包问题
Windows技术篇——Socket粘包问题
276 0
Socket粘包问题终极解决方案—Netty版(2W字)!(11)
Socket粘包问题终极解决方案—Netty版(2W字)!(11)
130 0
Socket粘包问题终极解决方案—Netty版(2W字)!(11)
Socket粘包问题终极解决方案—Netty版(2W字)!(10)
Socket粘包问题终极解决方案—Netty版(2W字)!(10)
149 0