java中的分包处理_第1页
java中的分包处理_第2页
java中的分包处理_第3页
java中的分包处理_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java 中的分包处理java 中的分包处理 一般在 socket 处理大数据量传输 的时候会产生粘包和半包问题,有的时候 tcp 为了提高效率 会缓冲 N 个包后再一起发出去,这个与缓存和网络有关系。 接收端接收到正确的后都要给发送端一个应答。不给应答的 算超时,发送端将重发。 出现粘包和半包现象,是因为 TCP当中 ,只有流的概念 ,没有包的概念 .。可以使用 UDP 协议 .这样可以就可以区分每个包了.但是要确保包的丢失处理 .为了提到效率 ,可以考虑写一个滑动窗口进 行收发包 .若采用 TCP 协议进行传输 ,就要将每个包区分开来.可以有三种方式 .因为 TCP 是面向流的 .流只有打

2、开和关闭 ,你要用一 个流传输多个包 ,那就要向办法区分出每个包. 1.可以每次发送同样大小的包 ,过大的包不予发送 ,过小的包 ,后面部分用固 定的字符 /0 进行填充。 2. 将流按字符处理 ,抽出一个字符做 转义字符(通常Java用/来做转义字符,比如”/n”表示换行).假 如就设 /为转义字符 ,发送方如果流当中出现 / ,就在后面在追 加一个 / ,如果包结束 ,则用 /做包的结束符 .这样,在接收方 ,若 读取一个单独的 /或者流结束 ,就标示前面的内容构成一个包 如果连续读取两个 / ,就将两个 /用一个 /进行替换 .这样,就可 以保证原来包中的信息不变 ,同时也能区分出每个包

3、了。 3. 在发送方发送一个包的时候 ,先将这个包的长度发送给对方 (一般是 4 个字节表示包长 ),然后再将包的内容发送过去 .接 收方先接收 4 个字节 ,看看包的长度 ,然后按照长度来接收包 , 最好是大端字节序。 以上三种方法 ,是网络传输中经常用到 的方法 . 后两种很常见 . 最后一种 ,在 TCP 长连接传输中应用 最多 .综合以上的说法 ,就是要在 TCP 协议以上再封装一层协议 ,用 来做分包的信息交换 .当然 ,如果 TCP 不是非要长连接 ,或者 ,信息包不是批量传输 的情况下 .可以一次 TCP 连接只传输一个包 .这种情况下一般 一次 TCP 完成一次交互 , 即发送

4、方发送信息包 ,接收方接收信 息包同时发送一个接收方的响应包给发送方 ,表明接收方收 到信息包 ,还是收到了错误包 ,或者接收方系统异常没有处理 这个包之类的信息 . 其实 HTTP 的交互过程 ,就是这样的 . 读 取数据使用 DataInputStream 和 DataOutputStream ,不要 用 BufferedReader 和 PrintStream 。使用字节传送方式,使 用 readFully , readFullypublic final void readFully(byte b)throws IOException 参见DataInput 的 readFully 方法

5、的常规协定。 从所包含的输入流中读取此操作需要的字节。 指定者: 接口 DataInput 中的 readFully 参数:b - 存储读取数据的缓冲区。抛出:EOFException - 如果此输入流在读取所有字节之前到达末 尾。IOException - 如果发生 I/O 错误。 另请参见:FilterInputStream.in - readFullypublic final void readFully(byte b,int off,int len)throws IOException 参见DataInput 的 readFully 方法的常规协定。 从所包含的输入流中读取此操作需要的字节。 指定者: 接口 DataInput 中的 readFully参数:b - 存储读取数据的缓冲区。off - 数据的起始偏移量。len - 要读取的字节数。抛出:EOFException - 如果此输入流在读取所有字节之前到达末 尾。IOException - 如果发生 I/O 错误。 另请参见:FilterInputStream.in Java code in = newDataInputStream(new Buffere

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论