websocket传传图片

参考[url]http://www.adobe.com/devnet/archive/html5/articles/real-time-data-exchange-in-html5-with-websockets.html
[/url]
server端还是用tomcat7的方式
客户端

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>

<body onload="startServer()">
<canvas id="myCanvas" width="400px" height="500px">myCanvas</canvas>
<canvas id="yourCanvas" width="400px" height="500px">yourCanvas</canvas>
<div id="chatdiv" width="400px" height="500px">chatdiv</div>

<input type="text" id="textMessage" size="20" />
<input type="button" onclick="sendMessage()" value="Send">
<input type="button" onclick="sendphoto()" value="sendphoto">
</body>
<script type="text/javascript">
var myCanvas=document.getElementById("myCanvas");
var context=myCanvas.getContext('2d');
var imagewidth=myCanvas.width;
var imageheight=myCanvas.height;
var yourCanvas=document.getElementById("yourCanvas");
var context2=yourCanvas.getContext('2d');
var image = new Image();
image.src = "haoba.jpg";
image.onload = function(){
context.drawImage(image,0,0);
var imgData=context.getImageData(50,50,200,200);
context2.putImageData(imgData,10,260);
//ctx.putImageData(imgData,200,260,50,50,100,100);
};

var ws = null;
function startServer() {
var url = "ws://192.168.137.27:8081/hao/msg";
if ('WebSocket' in window) {
ws = new WebSocket(url);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(url);
} else {
alert('浏览器不支持');
return;
}
ws.binaryType = "arraybuffer";
ws.onopen = function() {
alert('Opened!');
};
// 收到服务器发送的文本消息, event.data表示文本内容
ws.onmessage = function(event) {
if(event.data instanceof ArrayBuffer){
var bytearray = new Uint8Array(event.data);
var tempcanvas = yourCanvas;
tempcanvas.height = imageheight;
tempcanvas.width = imagewidth;
var tempcontext = tempcanvas.getContext('2d');
var imgdata = tempcontext.getImageData(0,0,imagewidth,imageheight);
var imgdatalen = imgdata.data.length;
for(var i=8;i<imgdatalen;i++){
imgdata.data[i] = bytearray[i];
}
tempcontext.putImageData(imgdata,0,0);
var img = document.createElement('img');
img.height = imageheight;
img.width = imagewidth;
img.src = tempcanvas.toDataURL();
var chatdiv=document.getElementById("chatdiv");
chatdiv.appendChild(img);
chatdiv.innerHTML = chatdiv.innerHTML + "<br />";
}else{
alert('Receive message: ' + event.data);
}

};
ws.onclose = function() {
alert('Closed!');
}
ws.onerror = function(err){
alert(err);
};
}
//发送信息
function sendMessage(){
var textMessage=document.getElementById("textMessage").value;

if(ws!=null&&textMessage!=""){
ws.send(textMessage);
}
}

function sendphoto(){
imagedata = context.getImageData(0, 0, imagewidth,imageheight);
var canvaspixelarray = imagedata.data;
var canvaspixellen = canvaspixelarray.length;
var bytearray = new Uint8Array(canvaspixellen);
for (var i=0;i<canvaspixellen;++i) {
bytearray[i] = canvaspixelarray[i];
}
ws.send(bytearray.buffer);
context.fillStyle = '#000000';
context.fillRect(0, 0, imagewidth,imageheight);
}
</script>
</html>


tomcat7下的服务端
HelloWorldWebSocketServlet.java

package com.hao;


import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;

public class HelloWorldWebSocketServlet extends WebSocketServlet {
public static Map<String,MyMessageInbound> mmiList = new HashMap<String,MyMessageInbound>();

protected StreamInbound createWebSocketInbound(String subProtocol,
HttpServletRequest arg1) {
return new MyMessageInbound();
}
public int getUserCount(){
return mmiList.size();
}
private class MyMessageInbound extends MessageInbound {
WsOutbound myoutbound;
String mykey;
@Override
public void onOpen(WsOutbound outbound) {
try {
System.out.println("Open Client.");
this.myoutbound = outbound;
mykey =""+System.currentTimeMillis();;
mmiList.put(mykey, this);
System.out.println("mmiList size:"+mmiList.size());
outbound.writeTextMessage(CharBuffer.wrap("open "+mykey));
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void onClose(int status) {
System.out.println("Close Client.");
//mmiList.remove(this);
mmiList.remove(mykey);
}

@Override
protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
System.out.println("websocket-----onBinaryMessage:"+arg0.toString());
for (Map.Entry<String, MyMessageInbound> entry : mmiList.entrySet()) {
System.out.println(entry.getKey()+"--bin---");
MyMessageInbound mmib = (MyMessageInbound) entry.getValue();
mmib.myoutbound.writeBinaryMessage(arg0);
mmib.myoutbound.flush();
}
}

@Override
protected void onTextMessage(CharBuffer message) throws IOException {
System.out.println("onText--->" + message.toString());
String[] msgarray= message.toString().split(",");
for (Map.Entry<String, MyMessageInbound> entry : mmiList.entrySet()) {
System.out.println(entry.getKey()+"-----");
MyMessageInbound mmib = (MyMessageInbound) entry.getValue();
CharBuffer buffer = CharBuffer.wrap(message);
System.out.println(buffer);
mmib.myoutbound.writeTextMessage(buffer);
mmib.myoutbound.flush();
}
}
}


}


tomcat的配置文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>haomsg</servlet-name>
<servlet-class>com.hao.HelloWorldWebSocketServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>haomsg</servlet-name>
<url-pattern>/hao/msg</url-pattern>
</servlet-mapping>
</web-app>
通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(三) 不使用base64编码方式传递,优点速度快,卡顿少。 通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示 阅读详情

相关推荐

websocket 推送图像 Js显示

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

Qt WebSocket的基本使用

(只是作为个人纪录,如果你要使用的话在 Qt 示例里搜 websocket 看官方 Demo 就行了,代码量不多) 0.前言 (参见Qt文档说明)WebSockets 是一种通过单个 TCP 连接提供全双工通信信道的 web 技术。2011年,IETF 将 WebSocket 协议标准化为 RFC 6455 。Qt 提供的 QWebSocket 既可以用于客户端应用程序,也可以用于服务端应用程序,接口大部分和 QTcpSocket 一致。 QWebSocket 当前不支持 WebSocket 扩展和

龚建波 4万+

websocket从服务端获取图片

本例使用websocket获取服务端的图片并显示在浏览器上,服务端使用java注解方式实现,在tomcat8中调试通过

使用websocket接收服务端传来的图片

Websocket知识,大家可以查看互联网上找到很多相关的介绍,这里不再累述。这里者介绍如何发服务端通过websocket发送的图片显示在浏览器上。 首先来写服务端代码(SendImage.java): //配置客户端请求websocket的url @ServerEndpoint("/sendImage") publicclass SendImage {     //配置处理客户端消息的

ghpan的专栏 1万+

非华为电脑与MatePad Pro多屏协同实战:从安装管家到攻克连接难题

本文详细介绍了在非华为电脑上安装华为电脑管家并实现与MatePad Pro多屏协同的完整指南。从安装步骤、常见连接失败解决方案到华为账号绑定技巧,提供了实用的操作方法和硬件优化建议,帮助用户攻克连接难题,提升多屏协同的稳定性和流畅度。

weixin_30263073的博客 233

【立创开源】太阳能板充电方案单节3.7v锂电池充电

一直对太阳能板感兴趣,老是感觉充电好麻烦,要是放在那里就可以自己充电多好,所以尝试做了一个太阳能充电板。因为这几天都是阴天,所以测试效果不太好,但是下雨天也是能充电的,但是基本只能维持电量不掉,电压差不多4.2v以上,电流只有2mA。中午出太阳的时候,隔着玻璃放在太阳下测试,电流有12mA以上。能充起一点点电。等大晴天看一看能不能达到卖家说50mA。┗( T﹏T )┛感觉达不到。这个东西只能当一个玩具(;′⌒`)。不过如果汽车上一些行车记录仪加一个这个,汽车经常在太阳下停车,可能再也不用充电了。

贾saisai的博客 1万+

WebSocket传输图片

本文之初是想做简易直播系统,然而利用Html5+WebSocket还是有难度啊。本文只是打通了图像采集->服务器,再由服务器推送到客户端的过程。中间全程使用Image Base64字符串传输(效率不高) 以下是实现步骤 1.实现服务端:有socket和WebSocket两大块构成。socket作为主线程,用于处理图像源上传请求以及管理WebSocket会话。当socket收到图像上传请求...

weixin_30381317的博客 3022

CKS-CN考试之路----02

其实我们根据题目也可以知道秘钥是叫clever-cactus。稍作等待后,确认pod的状态,如果是1/1基本就没问题了。这步不一定做.目的是确定秘钥的名字。

Q先生 654

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

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

weixin_19970108018的博客 3400

游戏大厂如何解析引擎技术

本文系统解析了游戏大厂如何评估和定制游戏引擎。游戏引擎作为游戏开发的核心基础,大厂会从性能、跨平台支持、渲染能力、网络模块等8个维度进行技术解析,通过文档查勘、源码阅读、Demo测试等7个步骤深度评估。解析后通常有三种决策:直接使用、深度定制或自研重构。文章以腾讯、网易、米哈游等为例,展示了不同厂商的引擎定制策略,并分析了技术解析面临的挑战和未来趋势。最终指出,体系化的引擎技术解析是打造高质量游戏的关键,需要持续的技术投入和团队协作。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 535

手把手教程 | 使用 apktool 修改已发布 APK 的版本号与版本名称

摘要:本文介绍如何使用apktool工具直接修改APK版本信息,适用于版本回滚、多版本测试等场景。详细步骤包括反编译APK、修改版本号、重打包、对齐优化和重新签名,并分享了反编译相关实用知识。该方法无需源代码参与,但需注意修改后的APK必须重新签名才能安装。最后强调应在合法范围内使用反编译技术。

学无止境 825

html5 websocket发送图片,通过WebSocket连接,实现Image从服务器到浏览器的传输

通过WebSocket链接,网页和服务端可以实现异步双向通讯。这里介绍如何从服务端获取一张图片,然后传输到网页中显示出来。参考原文:准备工作创建WebSocket Server创建一个WinForms工程,导入需要的reference。 添加namespace:建立Server:if(!appServer.Setup("192.168.8.84",2012))//Setupwithlis...

weixin_42371574的博客 3406

Halcon学习之一维测量(3)

带定位器的测量。首先看一下“定位”是什么意思?回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也要跟着一起转才行。这个时候就需要“定位”来起作用了!定位之后得到这个芯片的旋转角度之后,测量矩形可以跟着这个角度转。这就是“定位”+“测量”,这是我们工业视觉常用的一个手法,在Halcon里面也是有例子展现的。

deep_love1314的博客 788

使用websocket发送图片文件

Websocket是HTML5中的一个数据传输控件。 目前在主流的浏览器中都提供了支持。 关于websocket的相关协议可以在网上查到,关于如何建立连接等操作大家可以查询协议获得,本文主要讨论如何进行数据传输。   在客户端使用的是Chrome浏览器,在服务器端使用PHP开发websocket协议。   Websocket协议一个frame的标准格式:          0

xuing的专栏 4万+

图神经网络与大模型融合的理论综述:架构、机制与未来方向

然而,它们普遍缺乏对图结构数据的原生支持,无法直接处理边、节点之间的拓扑关系,这限制了其在关系密集型任务中的表现 [23]。2020年发布的BERT [16] 开启了自监督预训练时代,而2021年后,T5 [17]、PaLM [18]、LLaMA [19] 等模型相继推出,参数规模突破千亿级,展现出惊人的上下文学习(In-context Learning)与链式推理(Chain-of-Thought)能力 [20]。例如,将医学影像作为图节点,结合病理报告文本,实现更精准的疾病诊断 [58]。

andeyeluguo的博客 295

反应堆设计:基于MATLAB的反应堆仿真和分析,包括反应堆稳态分析、反应堆动态分析和反应堆安全分析 介绍

反应堆设计是利用计算机技术对核反应堆进行设计和模拟,以获得安全、高效、经济的核能发电系统。它是核能领域的重要组成部分,在电力生产、核医学、科学研究等领域有着广泛的应用。

走向CTO的路上... 1112

websocket图片数据传输

客户端:(图片转为base64) var files = document.querySelector("#f").files if(files.length>0){ var fileReader = new FileReader(); fileReader.readAsDataURL(files[0]) fileReader.onload=function (e) { var s = JSON.stri

linhaibing009的博客 2956

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

websocket实现聊天室应用,包括文字和图片上传

使用基于spring的websocket实现实时聊天功能,可以文字,也可以上传图片。

a4227139的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

websocket 传输文件及图片的…

问题:低延迟的客户端-服务器和服务器-客户端连接 https://www.html5rocks.com/zh/tutorials/websockets/basics/ 一直以来,网络在很大程度上都是围绕着所谓 HTTP 的请求/响应模式而构建的。客户端加载一个网页,然后直到用户点击下一页之前,什么都不会发生。在 2005 年左右,AJAX 开始让网络变得更加动态了。但所有 HTTP 通信仍然是

兜兜里全是糖_博客 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WebSocket发送图片或文件的思路(1)

最近一段时间自己在开发WebSocket一些功能,根据自己的经验和测试,做一些记录,希望和大家能有交流,希望大家对我的想法和思路提供意见和指导。 1、WebSocke发送图片时候,我建议是进行图片压缩,最好把图片压缩在100K以内(大多数的聊天软件其实都是对图片进行了压缩);       100k以内的大小图片内容放入数据库,基本一条记录就可以存放,而且不需要考虑内容的顺序;  

qq165285727的专栏 2万+

【Websocket】实现聊天室上传照片

1、ChatServer @Slf4j @ServerEndpoint("/websocket") @Component public class ChatServer { @OnOpen public void onOpen(){ log.info("---------------------------->on Open"); } @OnClose public void OnClose(){ log.info("---

kanseu的博客 3375

Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

websocket协议服务端使用python实现,并用pyqt作GUI界面,涉及到python异步通信async

共享IT之美,共创机器未来 1947

websocket实现聊天室应用,包括文字和图片上传_websocket onmessage怎么接收客户端的图片(2)

响应以上报文和一般的HTTP有很多不同的地方:1、请求和响应都有Upgrade: websocket和Connection: Upgrade,这是协议转换的意思,也就是请求时告诉服务器,本次连接需要的是websocket通信协议,而不是一般的HTTP,响应也带有该响应头表示转换成功。

2401_84978490的博客 526

Websocket通信实战项目(js)(图片互传应用)(下)客户端H5+css+js实现

Websocket通信实战项目(js)(图片互传应用)(下)客户端H5+css+js实现

共享IT之美,共创机器未来 1956

OpenCV C++ 通过Websocket发送摄像头图片到Web端

程序中需要做人脸识别,web端要做摄像头预览,C++来实现人脸检测与人脸识别。为了使Web端实时预览到摄像头的画面,目前想到了一个方案:C++端打开摄像头抓图,然后发送图片给Web端来显示

搬砖 8002
上一篇: angularjs使用include后双向绑定失败的解决
下一篇: angular指令菜单的例子
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值