使用websocket发送图片文件

使用webSocket实现移动端与PC端传输图片 需求:我需要把移动端的一个base64图片传到PC端后,由PC端上传第三方接口,得到第三方接口返回的一个合成文件。 下面是我历经千辛万苦后得到的流程结果,我会按照下面如图顺序介绍每一个步骤 我好苦呀 下面开始介绍: 一.获取base64 这里实际是获取电子签名的base64,总之就是拿到一个base64 二.转文件流上传图片 里面的上传图片实际是调用接口,fd已经是可直接上传的formD... 阅读详情

Websocket是HTML5中的一个数据传输控件。

目前在主流的浏览器中都提供了支持。

关于websocket的相关协议可以在网上查到,关于如何建立连接等操作大家可以查询协议获得,本文主要讨论如何进行数据传输。

 

在客户端使用的是Chrome浏览器,在服务器端使用PHP开发websocket协议。

 

Websocket协议一个frame的标准格式:

         0                   1                   2                   3

     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

    +-+-+-+-+-------+-+-------------+-------------------------------+

    |F|R|R|R| opcode|M| Payload len |   Extended payload length    |

    |I|S|S|S|  (4)  |A|    (7)     |             (16/64)           |

    |N|V|V|V|       |S|             |  (if payload len==126/127)   |

    | |1|2|3|       |K|             |                               |

    +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +

    |     Extended payload lengthcontinued, if payload len == 127  |

    + - - - - - - - - - - - - - - - +-------------------------------+

    |                              |Masking-key, if MASK set to 1  |

    +-------------------------------+-------------------------------+

    | Masking-key (continued)      |          Payload Data         |

    +-------------------------------- - - - - - - - - - - - - - - - +

    :                     Payload Datacontinued ...                :

    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

    |                     Payload Datacontinued ...                |

    +---------------------------------------------------------------+

图中的Payload Len表示发送数据长度。

当数据长度小于126时(0-125),长度使用7位表示。

当Payload len等于126时,需要使用扩展长度(Extendedpayload length),此时用16位表示长度(0-65535)。

当Payload len等于127时,扩展长度的位数是64位(数据最大长度为2的64次方)。

 

所以理论上来讲,该协议能满足一次传输大数据的要求(相信也很少有一次性传输2的64次方数据的需求吧)。

 

实际使用中,会对发送数据的长度有一定限制。

比如出于安全考虑一次发送的MTU长度不大于1500个字节。

而chrome中对websocket的控件一次发送数据的长度限定在128Kbytes,也就是2的17次方的长度。并且这个最大长度貌似是不能通过配置修改的。

Php开发的服务器端,对发送数据的长度也有定义,通常是4096字节,这个大小是可以通过配置文件调整的,但出于整体性能的考虑一般采用默认设置。

 

通过以上情况可以看出,对于发送图片数据来说(一张图片往往会大于128KB)我们需要将图片数据进行切分。

         应用层的协议需要对切分的图片数据进行控制。同时对于发送的图片数据进行一些转码的处理。

        

         用户自定义数据传输协议位于数据的头部,占16个字节。

         每一部分以字符串的格式表示2个字节的short类型,比如0x0016,则字符串表示为’0016’

 

用户自定义协议头:

数据编号

Short类型(4个字节)

保留

Char类型(4个字节)

数据总包数

Short类型(4个字节)

当前数据包索引

Short类型(4个字节)

 

数据编号:

         标记一个大数据,防止在传输过程中产生错乱。一个大数据只有一个编号,从1开始,功能同时产生65535个大数据。

 

数据总包数:

         表示一个大数据一共拆分成的数据包个数,最少1包,最多65535包。每一包数据的大小可以自定义,但不应超过128Kbytes大小。

 

当前数据包索引:

         表示当前传输的是第几包数据。索引号从1开始,到65534结束。

 

 

接收和发送大数据的时候都需要对拆分的数据包进行处理。

发送时进行拆分处理。

接收时进行合并处理。

 

客户端的websocket数据收发基于chrome内核,使用JavaScript语言进行支持。

服务器端的websocket数据收发使用PHP语言进行支持。

 

客户端发送时需要对数据进行加密,使用Mask-Key,加密工作由websocket控件自动完成。

服务器端接收数据时需要对客户发发送的加密数据进行解密。

服务器端发送时暂时不对数据进行加密,后期可以考虑加上Mask-Key。

 

具体的Mask-Key和加解密的规则可以参考websocket协议。

 

 

 

 

 

选择图片发送

 

上图为选择一张图片发送到服务器端,再从服务器端返回到指定客户对显示。

图片的分辨率在320*240,图像大小在75Kbytes左右。

在发送时将数据拆分成2Kbytes大小的数据包,一共75K/2K*2=75包数据。

(编码时将一个字节拆成了两个字节编码)

每包发送数据的间隔定在500毫秒。(数据包的发送间隔的定义主要还是根据服务器端的处理能力制定,处理能力强可以更快的处理发送的数据包。或者可以使用应答方式进行传输,即每收到一包数据就通知发送端发送下一包数据。)

则我们可以计算出一幅75K左右的图片从A端传送到B端需要的时间是(相比较500毫秒的传送间隔,传送的数据可以忽略不计):

T=75*500ms=37.5s

也就是一幅320*240的图片传送时间在37.5s左右。

 

以上是以传输图片为例。进一步可以传输图像数据。还是以320*240图像为例,设每秒传输24幅图像,则传输一帧视频的流量为75KBytes*24=1.8Mbytes/s。

 

显然目前的传输速度对于传输视频是不够的。还需要在服务器端进行优化。

 

 

以下是测试地址:

         数据发送:

         发送数据连接

         数据接收:

         接收数据连接

 

使用步骤:

1,打开数据发送连接和数据接收连接

2,以用户名登录,注册地址如下:

         http://www.yourtechnic.com/login.php

3,正常登录连接之后,选择需要发送的图片,点击“SendPicData”按钮

4,等待数据传输完成,接收端显示图片。

 

下一步尝试将图片传输的功能添加到YourAPP中,同时测试一下视频传输的可能性。

 

優態客(YourTechnic)的博客:    www.yourtechnic.com

優態客(YourTechnic)的联系方式:postmaster@yourtechnic.com

WebSocket实现聊天功能 深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 阅读详情

相关推荐

java实现聊天功能

在发送图片或表情包时,需要将图片或表情包的内容转换为 Base64 编码,并将编码后的字符串作为消息内容发送。在接收到包含图片或表情包的消息时,需要创建一个新的 Image 对象,并将 Base64 编码加上相应的 MIME 类型,将其设置为 Image 对象的 src 属性,并将 Image 对象显示在聊天界面中。其中,"ws://" 是 WebSocket 协议的前缀,后面跟上 WebSocket 服务器的地址和端口号,"/websocket/chat" 是 WebSocket 服务器的路径。

走向CTO的路上... 1251

websocket实现群发图片

流程: (群发图片) 1.前台获取并连接websocket服务器,上传图片,将流、图片流通过websocket发送至服务器。 2.后台搭建websocket服务器,以及消息处理服务,将接收到的图片流转发给所有在线客户端。 3.客户端收到服务器转发的图片流,动态添加img标签,将图片在页面上展示。 效果: 1.未发图片时图片列表为空 2.发送图片,在线的客户端都会收到图片消息。 实现过程: 1.前台代码: (1)html代码 <!--发送图片按钮--> <form name="f

EatingSoilLang 5147

websocket 推送图像 Js显示

通过WebSocket实现服务器主动推送 图像数据通过Base64编码,定义为Json格式传输 前端收到Json数据后 将图像还原 代码有任何问题可以和我联系 liangji@csu.ac.cn 一起学习,此外也可以看我的博客 博客有更详细的介绍博客搜索qq_20038925即可

websocket 传输图片实现快速、安全的图片交换

是一种双向通信协议,可以用来传输图片。客户端将图片转换为二进制文件,然后使用 发送给服务器。1. 客户端将图片转换为二进制文件,然后使用 websocket 发送给服务器。4. 客户端根据服务器返回的路径,从服务器上请求图片,并显示在页面上。2. 服务器接收到图片的二进制数据,然后将其存储到磁盘中。3. 服务器将图片的路径返回给客户端。// 将接收到的二进制数据存储到磁盘中。// 将二进制文件发送给服务器。// 将图片的路径返回给客户端。// 将图片转换为二进制文件。// 客户端发送的数据。

weixin_19970108018的博客 3400

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 314

ERGM指数随机图模型全解析:从基础原理到R语言实操

从社交网络中的互惠、传递性和同质性等基本现象切入,介绍网络数据与传统回归分析的本质差异——边与边之间的依赖关系。指数随机图模型(ERGM)正是为刻画这种依赖结构而设计的统计框架,它通过指数族分布将网络结构效应显式建模,结合MCMC方法完成参数估计。ERGM在组织协作、传播扩散、生物生态等领域的应用日益广泛,其扩展模型TERGM、GERGM和多层ERGM进一步支持时序、权重与多重关系网络。本文系统梳理ERGM的理论基础、核心统计量、扩展模型选型及R语言实操要点,帮助研究者理解网络生成机制并完成收敛性诊断与结果

weixin_29050271的博客 358

websocekt发送大数据拆包_使用websocket发送图片文件

Websocket是HTML5中的一个传输数据控件。眼下在主流的浏览器中都提供了支持。关于websocket的相关协议能够在网上查到,关于怎样建立连接等操作大家能够查询协议获得。本文主要讨论怎样进行传输数据。在client使用的是Chrome浏览器,在server端使用PHP开发websocket协议。Websocket协议一个frame的标准格式:0 1...

weixin_39614011的博客 843

AI协议助手:法律文本解析与智能问答技术解析

自然语言处理(NLP)技术在法律文本解析中展现出巨大潜力,通过BERT等预训练模型实现条款分类与语义理解。结合OCR与知识图谱技术,AI协议助手能快速提取合同核心条款,并以问答形式解释法律术语,显著提升商务场景的决策效率。测试数据显示,该系统对NDA协议的识别准确率达92%,响应时间仅1.2秒,特别适用于人力资源竞业协议、云服务SLA评估等场景。随着RAG架构与法律术语向量库的应用,AI+法律正推动合同审核成本下降67%,未来将在跨境合规、智能谈判等方向持续演进。

weixin_29053577的博客 128

html5 使用websocket发送图片文件…

http://blog.youkuaiyun.com/xuing/article/details/46684005 (原文地址) Websocket是HTML5中的一个数据传输控件。 目前在主流的浏览器中都提供了支持。 关于websocket的相关协议可以在网上查到,关于如何建立连接等操作大家可以查询协议获得,本文主要讨论如何进行数据传输。   在客户端使用的是Chrome浏览器,在服务器端使用PH

兜兜里全是糖_博客 3193

《派出你的AI同事:WorkBuddy案例实战》055:客服工单自动分类与话术生成

客服工单自动分类与话术生成 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 281

开源3D激光SLAM算法的异同点、优劣势与适配场景总结

本文对比分析了主流开源3D激光SLAM方案的核心差异与适用场景。LOAM架构简洁但精度较低;LeGO-LOAM轻量化适合地面机器人;LIO-SAM采用因子图优化支持多传感器融合;LVI-SAM通过视觉-激光-惯性三重冗余提升鲁棒性;FAST-LIO系列基于滤波架构实现超高实时性。选型需权衡传感器配置(纯激光/激光+IMU/激光+视觉)、运动状态(高速/常规)、计算资源等因素:资源受限选LeGO-LOAM或Faster-LIO,高速运动选FAST-LIO系列,退化环境选LVI-SAM,全局一致性需求选LIO-

Studying…… 651

Spring使用WebSocket,发送图片、表情、消息、心跳机制

Spring使用WebSocket,发送图片、表情、消息、心跳机制 项目地址:https://gitee.com/BestJohnny/spring-web-socket IndexController.java import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObj

Johnny_sunshine的博客 1488

杰理外挂flash使用教程(三): 打包提示音到外部flash(2)

本教程详细介绍了提示音制作与程序配置的全流程规范。提示音制作要求包括:英文命名(8字符内)、单声道转换、标准目录结构(cpu/br23/tools/)及使用user_tone_g.bat脚本生成res.bin资源文件。程序配置需修改:1)启用NOR_FS文件系统;2)调整存储空间;3)配置外置Flash参数;4)增强下载脚本追加资源参数。测试阶段建议替换开机提示音验证功能,扩展开发可参考tone_player.c的索引播放逻辑。所有操作均配有图示说明,关键配置需修改对应头文件和脚本参数。

qq_42014563的博客 586

可以发送图片文件的php聊天室,基于 Swoole 开发实时在线聊天室(十四):发送图片消息...

基于 Swoole 开发实时在线聊天室(十四):发送图片消息由 学院君 创建于1年前, 最后更新于 1年前版本号 #12055 views0 likes0 collects上篇教程我们演示了聊天室中文本/表情消息发布,今天我们来看看图片消息如何发布。前端交互代码我们还是从前端组件开始,在聊天室组件 Chat.Vue 中,客户端图片发送核心逻辑位于 fileup 方法中,我们需要对原来的代码进行调整...

weixin_33099015的博客 858

国产化操作系统shell常用脚本

国产操作系统常用脚本:统信、麒麟。

Reyn_观极 594

Jetson Thor平台JP7.0版本96712 GMSL相机驱动调试记录

摘要:本文档记录了在Thor Custom Board (JP7.0GA)上配置GMSL摄像头时遇到的视频流问题及调试过程。问题表现为视频设备(/dev/video11)能正常创建,但获取视频时出现"Internal data stream error",而相同配置在AGX Orin JP6.0上运行正常。通过梳理硬件拓扑、v4l2-ctl测试、提升时钟频率及分析内核日志,发现VI引擎未接收到帧数据包。调试步骤包括检查设备树冲突、调整I2C总线配置、修正通道名称,最终通过屏蔽传感器启动时

jzwjzw19900922的博客 1109

websocekt发送大数据拆包_通过拆分多帧的方式WebSocket发送图片

package mainimport ("fmt""golang.org/x/net/websocket""log""net/http""os""time")var (dirPath stringtest bytelenFile int)func check(e error) {if e != nil {panic(e)}}func ChatServer(ws *websocket.Conn...

weixin_39612499的博客 412

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

通过拆分多帧的方式WebSocket发送图片

package main import ( "fmt" "golang.org/x/net/websocket" "log" "net/http" "os" "time" ) var ( dirPath string test byte lenFile int ) func check(e error) { if e != n...

weixin_34138521的博客 637

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基于websocket协议的大文件接收

本文实现了一种基于webSocket协议大文件接收的C++实现方案

qq_26400055的博客 353

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

websocket+php+layIm实现 单聊、群聊功能 即时通讯【可发送图片文件】

php+websocket+layim实现即时通讯。 单聊、群聊等功能

cft15255135687的博客 1569

html使用socket实时传数据,HTML5WebSocket实现实时视频文字传输

HTML5的Canvas 可以实现绘图 然后应该是这样写的010203040506070809走你~1011121314var wsServer = 'ws://192.168.10.242:9999/webSocket.ashx'; //服务器地址15//var wsServer = 'ws://localhost:36027/webSocket.ashx'; //服务器地址16var canv...

weixin_39688636的博客 1172

C# websocket与html js实现文件发送与接收处理

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Fleck; using System.Threading; using System.IO; using System.Net.Web...

weixin_30947043的博客 311

基于SSM+Websocket的实时在线聊天室

一、项目介绍 一个基于SSM+Websocket的实时在线聊天室项目,主要功能如下 1. 用户注册登录:用户可以通过注册账号并登录系统,以便参与在线聊天。 2. 实时聊天:用户可以在房间中实时发送文本消息,与当前在线的其他用户进行实时聊天。 3. 聊天记录:系统会自动记录聊天内容,用户可以查看聊天历史记录。 3. 发送图片...

weixin_36946715的博客 284

项目实训—图片存储

图片存储 指定外部oss存储,比如阿里云、七牛云、git仓库,项目选择gitee仓库,首先建一个新仓库 -- 配置密钥 -- java模拟http请求发送上传请求 -- 返回访问链接存数据库 @Override public String upLoad(InputStream inputStream, String path) { //根据存储地区创建上传对象 System.out.println(inputStream + " " + path); //设置转存到Gitee

vincy_yeha的博客 986

QWebsocket通信

/SslMode指示服务器是通过wss(SecureMode)还是ws(NonSecureMode)运行。QWebSocketServer::SecureMode服务器以安全模式运行(通过wss);//使用给定的serverName构造一个新的QWebSocketServer。//每当接收到二进制消息时,就会发出此信号。//每当接收到文本消息时,就会发出此信号。4、如果有客户端连接,则做处理,如获取socket连接,关联接收槽。接收数据:```接收二进制收据。接收数据:```接收文本。

weixin_43246170的博客 2294
上一篇: 使用YOURAPP做移动应用开发
下一篇: 树莓派与window 10组成的物联网核心:让人失望
xuing
博客等级 码龄23年 86粉丝 31原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值