艾叶点燃的功效与作用:java基于TCP的socket数据包拆分方法
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 12:41:10
关键字:java socket tcp 分包 粘包好了,现在轻松许多。话说看到falcom官方的《空轨》动画时间表,又看到崩坏的人设,我表示真的非常不能接受。当然了这个咱也管不着。好了话归正题,前不久写的socket程序,服务器是java的,客户端是flex。一开始就想过所谓的拆分数据包的问题,因为数据包结构是自己定义的,也简单的写了几行数据包的验证。关键是测试中完全没有发生什么情况,但是发布到外网之后却出现一些非常奇怪的问题,典型的就是通信过一定时间之后,数据包验证那块就会出错然后就抛弃了数据包,这就是所谓的“丢包”吧,但是我的是TCP的socket,所谓因为网络问题导致的数据包没有发送与接收成功这种问题应该是不可能出现的。于是看了几篇文正,发现这种现象被称作“粘包”,我觉得还是挺贴切的。经过一定时间的思考、和测试,大概了解了其中的原理,按照现在的此时情况来看,应该是没什么问题。于是在此总结一下,如果哪天我发现一些新问题或更好的方法,还是会来继续补充这篇文章的。当然各位路过的前辈觉得其中存在错误什么的也请指出。首先在将程序之前,还是先说一下TCP的通信。TCP和UDP的最大区别就是TCP维护了连接状态,而这个状态我们可以理解为一个畅通的流通道,即stream,当然流的传输内容归根结底还是byte。于是将流的通信进行假设,假设存在一条引水管道,从远方输水过来,我们在这边等待水的到来,并使用容器接收流出来的水。此时存在一下几种情况:
- 假设这个输水管道在操作过程中不会断掉。
- 先进先出,先流进管道的水一定是先到达。
- 某一状态,(在输水管没有断掉是)流量无法保证,甚至某段时间没有水。
- 我们的容器(缓冲区)大小固定,即每次接收的水量存在最大值,超多将无法接收。
- ByteBuffer.remaining(),此方法最给力,返回剩余的可用长度,此长度为实际读取的数据长度,最大自然是底层数组的长度。于是这样看来这个ByteBuffer更像是一个可标记的流。
- ByteBuffer.get(byte[]),从ByteBuffer中读取byte[]。
求Java基于socket和多线程技术的聊天室程序源代码
无法执行SOCKET的TCP
请问socket和TCP协议的关系?
(跪求)基于socket技术的网络聊天室程序
技术问题:关于JAVA的SOCKET
怎么弄基于wincap库抓数据包的c程序
基于TCP/IP协议的远程登录命令是
基于TCP/IP协议的远程登录命令是( ) 。
基于snmp的网络管理(java方向)
什么是基于Java的GUI控制器模块
我的网镖老是收到TCP数据包是怎么回事?
急!拦截从61.172.197.202:88接收的TCP数据包
电脑不断受到ICMP和TCP数据包的攻击,怎么办
电脑不断受到ICMP和TCP数据包的攻击,怎么办?
防火墙拦截从某个IP接受的TCP数据包是什么意思?
来自网络的TCP与ICMP数据包是什么????
来自网络的TCP与ICMP数据包是什么????
拦截从127.0.0.1:3722接收的TCP数据包
什么是 TCP 数据包?我的防火墙拦截这种数据包是因为有人刻意袭击我吗?
ICMP数据包还有TCP数据包是什么意思?
ICMP数据包 TCP数据包 各是什么意思??
帮我查找关于 基于Socket的数据传输的资料和发展前景
.NET 和基于Java的企业测量的基础
.NET 和基于Java的企业测量的基础