Java Socket连续传输多张图片(不断开链接)

一、问题描述
         我们在做图片传输时,通常都是打开一个http请求,然后去下载一张图片,下载完成后,这个链接就断开了,在这样的情况下,我们最多允许传送一张图片,那么,像刚才那样的做法就不行了。而我的需求是,比如我有100张图片,我想传输完一百张图片在断开链接,或者更夸张点,我做了一个屏幕广播程序,需要把截图来的图片一张张的发给客户端,不想断开,也不能断开,然后我想什么时候断开就断开,不传图片我也不断开。这样的需求,用http请求就不太划算了,因为不断的请求链接然后在断开,是会降低传输效率的。那么有什么办法可以实现像刚才那样的需求呢,办法肯定是有的,接下来,我将我所积累的方法告诉大家。

二、方法
         说到方法,那么我们就要用最原始的通信工具了,那就是Socket,要实现在一个链接上不停的传输图片(比如屏幕广播程序),就需要自定义一个应用层协议,才能实现样的需求,废话不多说,请看我自己定义的协议:

图片数据包头(8byte) | 图片编号(4byte) | 图片名称长度(4byte) | 图片名称 | 图片字节数据长度(8byte) | 图片数据 | 奇偶校验(4byte)

协议解释:
         图片数据包头:定义这个包头就是表示我这是一张图片数据的开始,当我找到这个头之后,才可以去读取图片数据信息,不是随便找一个字节就开始读,那样的话,你永远也得不到一张图片。包头是你自己随意定义的一段特殊的数据,这样才可以和图片数据分开。

         图片编号:为啥是4byte呢,其实它就是一个int型的值,协议中我写了这些单位的,都是Java的基本数据类型(除包头和奇偶校验外),相应的,图片数据 长度就是long型。

         别的协议段不再解释,相信都看得懂,如果你的图片编号超过了int能承受的值,可以使用8byte,也就是long类型。有了这个协议,那么我们就可以传输图片了。

三、实现代码

1、先定义好协议包头,这个是随机的,想怎么定义就怎么定义,越特殊越好。

//协议包头和奇偶校验
 public final static byte[] PICTURE_PACKAGE_HEAD = {(byte) 0xFF, (
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值