websocket协议

本文详细介绍了WebSocket协议,包括其作为TCP上的传输协议特性、连接建立过程(客户端发起HTTP升级请求,服务器响应Upgrade头)、数据发送(固定字节、包长度、掩码处理)和接收(解析头部、解码数据)、以及关闭协议(主动关闭及关闭标志)。WebSocket为实时通信提供了高效、双向通信的通道。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

websocket协议

1: websocket是基于TCP的一种协议,是H5的一种传输协议;
2: websocket连接协议;
3: websocket 发送数据协议;
4: websocket 接受数据协议;
5: websocket 关闭协议;


websocket连接协议

1:客户端向服务器发送http报文,服务器处理后回客户端连接报文;
2: 客户端发过来的报文:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

3: 服务器回应客户端报文:
:key+migic , SHA-1 加密, base-64 加密
key=”来自客户端的随机”, migic = “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”;
static char *wb_accept = “HTTP/1.1 101 Switching Protocols\r\n” \
“Upgrade:websocket\r\n” \
“Connection: Upgrade\r\n” \
“Sec-WebSocket-Accept: %s\r\n” \
“WebSocket-Protocol:chat\r\n\r\n”;

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "uv.h"
#include "./../3rd/http_parser/http_parser.h"
#include "./../3rd/crypto/sha1.h"
#include "./../3rd/crypto/base64_encoder.h" 
struct ws_context{
    int is_shake_hand;//是否已经握手
    char* data; //读取数据的buf
};



static uv_loop_t* loop = NULL;//创建对象
static uv_tcp_t l_server;  //监听句柄


static void uv_alloc_buf(uv_handle_t* handle,
    size_t suggested_size,
    uv_buf_t* buf){

    struct ws_context* wc = handle->data;


    if (wc->data != NULL){
        free(wc->data);
        wc->data = NULL;
    }
    buf->base = malloc(suggested_size+1);
    buf->len = suggested_size;
    wc-> data = buf->base;
}
static void on_close(uv_handle_t* handle){
    printf("close client \n");
    if (handle->data){
        struct ws_context* wc = handle->data;
        free(wc->data);
        wc->data = NULL;
        free(wc);
        handle->data = NULL;
    }

    free(handle);
}
static 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值