之前用Java的Socket模拟HTTP传输实现了WebSocket的服务端,并成功与客户端握手

但是有个问题,就是从Server传输数据超过126字节就不行,连接自动断开还报错InputStream in=socket.getInputStream();

OutputStream out=socket.getOutputStream();

byte[] buff=new byte[3072];

int hasRead=0;

while((hasRead=in.read(buff)>0){

byte[] pushHead=new byte[2];    //在传递数据前要传递这个数据头

String x="要传输的数据......";

pushHead[0]=buff[0];            //数据头数组的第一个字节是接收到的数据的第一个字节

//第二个字节是要传输数据的字节数组长度转化成的字节

pushHead[1]=(byte)x.getBytes("UTF-8").length;

out.write(pushHead);            //先传递数据头

out.write(x.getBytes("UTF-8");  //再传递数据

}

上面的代码在传递的数据转化成的字节数组长度小于126时是OK的,但是>=126时就报错。

因为字节的范围是-128~127,所以传输数据长度大于125就报错

那就要另外的处理方法

传输跟据数据长度分三种情况,即有三种范围小于126,那么上面的代码就OK了

大于125 小于65536  那么数据头的第二个字节存的是(byte)126,第三第四个字节存的是数据长度

大于65535   数据头第二个字节存的是(byte)127,后面再有8个字节存数据长度

这样说过于平面,看代码吧(代码也是平面的好不 (╯°Д°)╯( ┻━┻    )

InputStream in=socket.getInputStream();

OutputStream out=socket.getOutputStream();

byte[] buff=new byte[3072];

int hasRead=0;

while((hasRead=in.read(buff)>0){

byte[] pushHead;    //在传递数据前要传递这个数据头

String x="要传输的数据......";

int length=x.getBytes("UTF-8").length;

if(length<126){

pushHead=new Byte[2];

pushHead[0]=buff[0];    //数据头数组的第一个字节是接收到的数据的第一个字节

//第二个字节是要传输数据的字节数组长度转化成的字节

pushHead[1]=(byte)x.getBytes("UTF-8").length;

out.write(pushHead);            //先传递数据头

}

else if(length>125 && length<65536){

pushHead=new Byte[4];

pushHead[0]=buff[0];

pushHead[1]=(byte)126;

pushHead[2]=(byte)((length>>8) & 0xFF);

pushHead[3]=(byte)(length & 0xFF);

out.write(pushHead);

}

else if(length>65535){

pushHead=new Byte[4];

pushHead[0]=buff[0];

pushHead[1]=(byte)127;

pushHead[2]=(byte)((length>>56) & 0xFF);

pushHead[3]=(byte)((length>>48) & 0xFF);

pushHead[4]=(byte)((length>>40) & 0xFF);

pushHead[5]=(byte)((length>>32) & 0xFF);

pushHead[6]=(byte)((length>>24) & 0xFF);

pushHead[7]=(byte)((length>>16) & 0xFF);

pushHead[8]=(byte)((length>>8) & 0xFF);

pushHead[9]=(byte)(length & 0xFF);

out.write(pushHead);

}

out.write(x.getBytes("UTF-8");  //再传递数据

}

这样大一些的数据也能一次传了,原先只能传不超过126字节数据时,要把数据分割分批传递,客户端接收后再组装或其它方式处理。不过目前只试了字符串的传输,还没试过图片,回头试试

websocket传输数据大小限制_WebSocket传输超过126字节数据的方法相关推荐

  1. websocket传输数据大小限制_websocket 发送字符串数据上限是多少

    匿名用户 1级 2017-06-07 回答 网上很多关于websocket发送数据大于大于0xFFFF(65535)的处理都是一句话"暂不处理"!!!!!所以特写此文. int W ...

  2. websocket传输数据大小限制_websocket设置传输大小

    tomcat中有提到: If the application does not define a MessageHandler.Partial for incoming text messages, ...

  3. websocket传输数据大小限制_WebSocket基础知识笔记

    一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有 ...

  4. 蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU)

    前言:在默认情况下,BLE 支持传输一次性最大不超过20字节的数据包,但是很多应用场景下,往往会需要传输更多数据.下面说下如何进行一些修改,使之能够传输更大数据. 实验环境: 客户端:nRF Conn ...

  5. websocket传输数据大小限制_踩踏websocket:发送缓冲区大小超过允许的限制

    在客户端我使用Stomp进行websocket连接,服务器端使用 Spring 4 客户端我做了配置 var socket = new SockJS(urlBase + "/" + ...

  6. websocket中发生数据丢失_Websocket传输可靠性(重新连接时Socket.io数据丢失)

    其他人在其他答案和评论中暗示了这一点,但根本问题是Socket.IO只是一种传递机制,你不能单独依靠它来实现可靠的交付 . 唯一确定消息已成功传递给客户端的人 is the client itself ...

  7. netty udp接收超过2048字节数据

    默认netty udp接收DatagramPacket字节数最大是2048,如果数据大,超过这个限制,就会报错,抛出异常,虽然这个包解析失败,不会影响其他包的解析,但是总得来说,这种失败是不利于数据收 ...

  8. oracle xmltype转字节,extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法

    extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法 发布时间:2020-08-14 15:40:17 来源:ITPUB博客 阅读:226 作者:guocun09 ...

  9. 【FAQ】【HarmonyOS】鸿蒙java开发关于蓝牙通信api的传输数据大小设置

    [问题描述] 在使用BlePeripheralDevice类的writeCharacteristic方法向蓝牙传输数据,如果数据长度长一点,通过串口工具发现蓝牙设备端是会分包接受数据的各个部分,那么鸿 ...

  10. FAILED BINDER TRANSACTION (Android Binder传输数据大小限制)

    Android源代码中大小设置 http://androidxref.com/9.0.0_r3/xref/frameworks/native/libs/binder/ProcessState.cpp# ...

最新文章

  1. SQL数据库常见故障及解决方法
  2. python中remove函数是什么意思,python中pop函数和remove函数有什么区别
  3. 用python绘制柱状图标题-如何用Python绘制3D柱形图
  4. WEB前端--HTML
  5. tp5某个字段相同的数据只取一次_多维分析数据仓库建设建议-面向主题的建模...
  6. 苹果风格ui_苹果如何使Soft-UI成为未来
  7. LeetCode MySQL 626. 换座位
  8. next.js 无法导出及导出图片无法加载等问题
  9. webView图片点击可以实现预览效果
  10. SVN客户端安装与使用
  11. VBA实战技巧精粹018:如何汇总数据
  12. 计算机考试多选试题及答案,计算机中级职称考试试题及答案 [2018职称计算机考试WPS_Office多选试题及答案]...
  13. 《ARM体系结构与编程》中的严重错误
  14. CSI-RS接收流程
  15. 微软bing搜索引擎疑似被屏蔽 国内多地无法访问
  16. 数据库连接报错 Communications link failure 连接失败解决办法
  17. 元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来
  18. 小米pro加装固态硬盘以及拆机方法
  19. 产品经理(Product Manager)相关英文术语
  20. 解决Past duration X.XXXX too large警告

热门文章

  1. 钓鱼网站制作 ---- Setoolkit 克隆web页面钓鱼
  2. 计算机页码格式罗马数字,word 页码 罗马数字怎么从1开始
  3. 南京大学2019计算机学院复试名单,南京大学计算机科学与技术系2019考研复试名单...
  4. word文字上下间距怎么调_word上下文字间距 word字体上下间距怎么调整
  5. 大数据:大一整年感悟及总结
  6. 在浏览器连接linux服务器,使用浏览器连接Linux服务器
  7. c语言汉字属于什么类型_【C语言】必学知识点 - 基本数据类型!你学会了吗?...
  8. 按键消抖(并联0.1uf电容)
  9. 对事件流的小故事理解
  10. SAR图像去噪方法研究