java实现websocket握手协议

这篇具有很好参考价值的文章主要介绍了java实现websocket握手协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

String str = new String(data, CHARSET);
        String[] arr = str.split("\r\n");
        String[] temp = arr[0].split(" ");
        Map<String, String> map = this.toMap(arr);
        String base64 = generateWebSocketAccept((String)map.get("Sec-WebSocket-Key"));
        StringBuffer sb = new StringBuffer(200);
        sb.append(temp[2]).append(" 101 Switching Protocols\r\n");
        sb.append("Upgrade: websocket\r\n");
        sb.append("Connection: Upgrade\r\n");
        sb.append("Sec-WebSocket-Accept: ").append(base64).append("\r\n\r\n");

其中最重要的是最后几个换行不要丢,将字符串转成byte[]写给客户端即可

public static String generateWebSocketAccept(String webSocketKey) {
        System.out.println(webSocketKey);
        try {
            String acc = webSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
            MessageDigest sh1 = MessageDigest.getInstance("SHA1");
            sh1.update(acc.getBytes(CHARSET), 0, acc.length());
            return Base64.getEncoder().encodeToString(sh1.digest());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA-1 algorithm not found", e);
        }
    }

收到的掩码转换

int i, j;
        for(i=0, j=0; i<data.length; i++, j++) {
            data[j] = (byte) (data[i] ^ masks[j % 4]);
        }

下面是服务器向客户端发送消息文章来源地址https://www.toymoban.com/news/detail-716098.html

public byte[] doSend(String mess) throws IOException{
        byte[] rawData = mess.getBytes();

        int frameCount  = 0;
        byte[] frame = new byte[10];

        frame[0] = (byte) 129;

        if(rawData.length <= 125){
            frame[1] = (byte) rawData.length;
            frameCount = 2;
        }else if(rawData.length >= 126 && rawData.length <= 65535){
            frame[1] = (byte) 126;
            int len = rawData.length;
            frame[2] = (byte)((len >> 8 ) & (byte)255);
            frame[3] = (byte)(len & (byte)255);
            frameCount = 4;
        }else{
            frame[1] = (byte) 127;
            int len = rawData.length;
            frame[2] = (byte)((len >> 56 ) & (byte)255);
            frame[3] = (byte)((len >> 48 ) & (byte)255);
            frame[4] = (byte)((len >> 40 ) & (byte)255);
            frame[5] = (byte)((len >> 32 ) & (byte)255);
            frame[6] = (byte)((len >> 24 ) & (byte)255);
            frame[7] = (byte)((len >> 16 ) & (byte)255);
            frame[8] = (byte)((len >> 8 ) & (byte)255);
            frame[9] = (byte)(len & (byte)255);
            frameCount = 10;
        }

        int bLength = frameCount + rawData.length;

        byte[] reply = new byte[bLength];

        int bLim = 0;
        for(int i=0; i<frameCount;i++){
            reply[bLim] = frame[i];
            bLim++;
        }
        for(int i=0; i<rawData.length;i++){
            reply[bLim] = rawData[i];
            bLim++;
        }

        return reply;

    }

到了这里,关于java实现websocket握手协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • netty对websocket协议的实现

    1. websocket协议 websocket协议是对http协议的扩充, 也是使用的TCP协议可以全双工通信的应用层协议。 websocket协议允许服务端向客户端推送消息。 浏览器和服务端只需要进行一次握手,不必像http协议一样,每次连接都要新建立连接,两者之间创建持久性的连接,并进行双向的数

    2024年01月20日
    浏览(32)
  • FPGA协议篇:UART通信及Verilog最易懂实现方式/通用于任何工程/带握手信号 ----UART_TX

            UART(Universal Asynchronous Receiver/Transmitter)是一种通用的 异步收发传输协议 ,用于在计算机系统和外部设备之间进行串行数据传输。UART 协议定义了数据的传输格式和通信规则,使得不同设备之间能够进行可靠的数据交换。 首先先把设计代码放到这里: UART_TX完整代

    2024年03月27日
    浏览(40)
  • 整合 WebSocket 基于 STOMP 协议实现广播

    SpringBoot 实战 (十六) | 整合 WebSocket 基于 STOMP 协议实现广播 如题,今天介绍的是 SpringBoot 整合 WebSocket 实现广播消息。 什么是 WebSocket ? WebSocket 为浏览器和服务器提供了双工异步通信的功能,即浏览器可以向服务器发送信息,反之也成立。 WebSocket 是通过一个 socket 来实现双

    2024年01月21日
    浏览(40)
  • WebSocket协议理解并实现在线聊天

    写在前面 WebSocket 简称 ws 本文通过介绍ws,然后一步步的使用ws协议进行前后端开发测试,最后使用 SpringBoot 和 vue 利用ws协议达实现一个在线聊天室的小demo(源码在文章末尾)。 看完此篇后将能够完成这样的小demo (需要会使用springboot和vue2以及element-ui) WebSocket是在 HTML5 开

    2024年02月04日
    浏览(25)
  • Websocket及三次握手/四次挥手

    Websocket-实时通信 之前一直听说Websocket,但也一直没有使用过,今天突然又看到了,还挺感兴趣的,可以一起看看 原理:浏览器间隔几秒发送一次请求,询问服务器是否有新消息出现,持续 优点:实现简单,大部分浏览器和服务器支持 缺点:频繁的请求和响应会导致不必要

    2024年02月20日
    浏览(33)
  • 什么是Java中的WebSockets,以及它与HTTP协议的区别?

    WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它提供了一种在客户端和服务器之间进行实时双向数据传输的机制。与传统的 HTTP 协议相比,WebSocket 具有以下特点和区别: WebSocket 的特点: 全双工通信: WebSocket 提供了全双工通信的能力,客户端和服务器可以同

    2024年02月19日
    浏览(31)
  • 实现c++轻量级别websocket协议客户端

    因以前发过这个代码,但是一直没有整理,这次整理了一下,持续修改,主要是要使用在arm的linux上,发送接收的数据压缩成图片发送出去。 要达到轻量websocket 使用,必须要达到几个方面才能足够简单, 1、不用加入其他的库 2、只需要使用头文件包含就可以 3、跨平台 如果

    2024年02月12日
    浏览(31)
  • 2.1.4websocket协议与服务器实现

    本文基于websocket协议,在2.1.3http/https服务器的实现中TCP服务器代码的基础上实现websocket服务器。 websocket的主要应用场景 服务器主动推送数据给浏览器 websocket握手流程(在tcp三次握手之后) 浏览器发送请求 服务器接收请求并获取Sec-WebSocket-Key的值并进行相应的计算得到Sec-W

    2024年02月02日
    浏览(27)
  • 持久双向通信网络协议-WebSocket-入门案例实现demo

    1 介绍 WebSocket 是基于 TCP 的一种新的 网络协议 。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建 持久性 的连接, 并进行 双向 数据传输。 HTTP协议和WebSocket协议对比: HTTP是 短连接 (一次响应完即消除) WebSocket是 长连接

    2024年01月16日
    浏览(32)
  • SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦)

    目录   前言 技术栈 功能展示 一、springboot项目添加netty依赖 二、netty服务端 三、netty客户端 四、测试 五、代码仓库地址   专属小彩蛋:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站(前言 - 床长人工智能教程

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包