• 大小: 12KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: 并发编程  websocket  

资源简介

内部包含本人原创c语言编写的websocket服务端程序源码,默认支持1024条并发,可修改源码轻易支持更高并发,并会自动删除已关闭的连接,里面含80%以上源码写有注释,可帮助websocket小白快速入门,积分不够的小伙伴可以在我的博客直接复制源码,https://blog.csdn.net/baidu_39146182/article/details/81394046

资源截图

代码片段和文件信息

/*********************************************************************************
 *      Copyright:  (C) 2017 Yang Zheng  
 *                  All rights reserved.
 *
 *       Filename:  base64.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(08/17/2017~)
 *         Author:  Yang Zheng 
 *      ChangeLog:  1 Release initial version on “08/17/2017 02:09:12 PM“
 *                 
 ********************************************************************************/
#include “base64.h“
 
const char base[] = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=“; 
 
char *base64_encode(const char* data int data_len) 

    int prepare = 0; 
    int ret_len; 
    int temp = 0; 
    char *ret = NULL; 
    char *f = NULL; 
    int tmp = 0; 
    unsigned char changed[4]; 
    int i = 0; 
    ret_len = data_len / 3; 
    temp = data_len % 3; 
 
    if (temp > 0) 
        ret_len += 1; 
 
    ret_len = ret_len*4 + 1; 
    ret = (char *)malloc(ret_len); 
    if ( ret == NULL) { 
        printf(“ret alloc failure.\n“); 
        return NULL; 
    } 
    memset(ret 0 ret_len); 
 
    f = ret; 
    while (tmp < data_len) 
    { 
        temp = 0; 
        prepare = 0; 
        memset(changed ‘\0‘ 4); 
        while (temp < 3) 
        { 
            if (tmp >= data_len) 
                break; 
 
            prepare = ((prepare << 8) | (data[tmp] & 0xFF)); 
            tmp++; 
            temp++; 
        } 
 
        prepare = (prepare<<((3-temp)*8)); 
        for (i=0; i<4 ;i++) { 
            if (temp < i) 
                changed[i] = 0x40; 
            else 
                changed[i] = (prepare>>((3-i)*6)) & 0x3F; 
 
            *f = base[changed[i]]; 
            f++; 
        } 
    } 
    *f = ‘\0‘; 
      
    return ret; 

 
static char find_pos(char ch)   

    char *ptr = (char*)strrchr(base ch);//the last position (the only) in base[] 
    return (ptr - base); 

 
char *base64_decode(const char *data int data_len) 

    int ret_len = (data_len / 4) * 3; 
    int equal_count = 0; 
    char *ret = NULL; 
    char *f = NULL; 
    int tmp = 0; 
    int temp = 0; 
    char need[3]; 
    int prepare = 0; 
    int i = 0; 
 
    if (*(data + data_len - 1) == ‘=‘) 
        equal_count += 1; 
 
    if (*(data + data_len - 2) == ‘=‘) 
        equal_count += 1; 
 
    if (*(data + data_len - 3) == ‘=‘) 
        equal_count += 1; 
 
    switch (equal_count) 
    { 
    case 0: 
        ret_len += 4;//3 + 1 [1 for NULL] 
        break; 
    case 1: 
        ret_len += 4;//Ceil((6*3)/8)+1 
        break; 
    case 2: 
        ret_len += 3;//Ceil((6*2)/8)+1 
        break; 
    case 3: 
        ret_len += 2;//Ceil((6*1)/8)+1 
        break; 
    } 
    ret = (char *)malloc(ret_len); 
    if (NULL == ret) { 
        printf(“ret alloc failure.\n“); 
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-31 15:56  websocket\
     文件        3704  2018-07-31 15:56  websocket\base64.c
     文件         764  2018-07-31 15:57  websocket\base64.h
     文件        1927  2018-08-03 13:23  websocket\intlib.c
     文件         659  2018-07-31 15:55  websocket\intlib.h
     文件       20877  2018-08-03 20:15  websocket\main.c
     文件        6699  2018-07-31 15:53  websocket\sha1.c
     文件        1151  2018-07-31 15:54  websocket\sha1.h

评论

共有 条评论