java中的分包处理.docxVIP

  • 32
  • 0
  • 约1.97千字
  • 约 6页
  • 2021-04-12 发布于天津
  • 举报
java java 中的分包处理 ... java java 中的分包处理 ... java 中的分包处理 般在 socket 处理大数据量传输 的时候会产生粘包和半包问题,有的时候 tcp 为了提高效率 会缓冲 N 个包后再一起发出去,这个与缓存和网络有关系。 接收端接收到正确的后都要给发送端一个应答。不给应答的 算超时,发送端将重发。 出现粘包和半包现象 ,是因为 TCP 当中 ,只有流的概念 ,没有包的概念 .。 可以使用 UDP 协议 .这样可以就可以区分每个包了 .但是要确 保包的丢失处理 .为了提到效率 ,可以考虑写一个滑动窗口进 行收发包 . 若采用 TCP 协议进行传输 ,就要将每个包区分开来 .可以有 种方式 .因为 TCP 是面向流的 .流只有打开和关闭 ,你要用 个流传输多个包 ,那就要向办法区分出每个包 . 1.可以每次发 送同样大小的包 ,过大的包不予发送 ,过小的包 ,后面部分用固 定的字符 /0 进行填充。 2. 将流按字符处理 ,抽出一个字符做 转义字符(通常Java用/来做转义字符,比如/n表示换行).假 如就设 /为转义字符 ,发送方如果流当中出现 / ,就在后面在追 加一个 /, 如果包结束 ,则用 /做包的结束符 .这样,在接收方 ,若 读取一个单独的 /或者流结束 ,就标示前面的内容构成一个包 如果连续读取两个 /, 就将两个 /用一个 /进行替换 .这样,就可 3.以保证原来包中的信息不变 ,同时也能区分出每个包了。 3. 接口 接口 DataInput 中的 readFully 在发送方发送一个包的时候 ,先将这个包的长度发送给对方 (一般是 4 个字节表示包长 ),然后再将包的内容发送过去 .接 收方先接收 4 个字节 ,看看包的长度 ,然后按照长度来接收包 , 最好是大端字节序。 以上三种方法 ,是网络传输中经常用到 的方法 . 后两种很常见 . 最后一种 ,在 TCP 长连接传输中应用 最多. 综合以上的说法 ,就是要在 TCP 协议以上再封装一层协议 ,用 来做分包的信息交换 . 当然 ,如果 TCP 不是非要长连接 ,或者 ,信息包不是批量传输 的情况下 .可以一次 TCP 连接只传输一个包 .这种情况下一般 , 次 TCP 完成一次交互 , 即发送方发送信息包 ,接收方接收信 息包同时发送一个接收方的响应包给发送方 ,表明接收方收 到信息包 ,还是收到了错误包 ,或者接收方系统异常没有处理 这个包之类的信息 . 其实 HTTP 的交互过程 ,就是这样的 . 读 取数据使用 DataInputStream 和 DataOutputStream ,不要 用 BufferedReader 和 PrintStream 。使用字节传送方式,使 用 readFully , readFully public final void readFully(byte[] b) throws IOException 参见 DataInput 的 readFully 方法的常规协定。 从所包含的输入流中读取此操作需要的字节。指定者: 从所包含的输入流中读取此操作需要的字节。 指定者: 参数: b - 存储读取数据的缓冲区。 抛出: EOFException - 如果此输入流在读取所有字节之前到达末 尾。 IOException - 如果发生 I/O 错误。 另请参见: FilterInputStream.in --- readFully public final void readFully(byte[] b, int off, int len) throws IOException 参见 DataInput 的 readFully 方法的常规协定。 从所包含的输入流中读取此操作需要的字节。指定者: 从所包含的输入流中读取此操作需要的字节。 指定者: 接口 DataInput 接口 DataInput 中的 readFully 参数: b - 存储读取数据的缓冲区。 off - 数据的起始偏移量。 len - 要读取的字节数。 抛出: EOFException - 如果此输入流在读取所有字节之前到达末 尾。 IOException - 如果发生 I/O 错误。 另请参见: FilterInputStream.in Java code in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); out = new DataOutputStream(socket.getOutputStream());

文档评论(0)

1亿VIP精品文档

相关文档