c++ websocket服务器

本文介绍了如何使用C++从头实现一个WebSocket(ws)服务器,重点在于握手协议的处理和数据通信。首先讲解了WebSocket连接后的HTTP GET握手包处理,接着展示了数据收发的实现,包括解密和组包过程。最后提到了将这些功能与原有的二进制协议通信结合以实现完整的WebSocket通信。源代码可在GitHub找到。
摘要由CSDN通过智能技术生成

h5游戏中网络通信不在使用二进制协议,而是使用websocket(ws) 或者使用基于https的wss进行通信,但是已经自己实现过n次二进制协议通信了,所以也不想使用第三方库的实现。下面就介绍下如何使用c++自己实现一个ws服务器,下一篇文章在介绍wss实现。其实ws的实现只是在二进制协议的基础上增加了一层简单的封装而已,实现并不难。下面介绍ws相关的处理,不会详细介绍epoll的实现部分。

首先ws在连接服务器后第一个包是http中get方法的握手协议包,所以对于第一个包需要特殊处理,握手包的处理代码如下:

bool CWSClientSocket::WSHandshake()
{
    if (m_pRecvBuf->GetSize() < PACKHEADSIZE)return true;//包长不够
    NetBuffer arrBuf[2];
    m_pRecvBuf->GetReadEnable(arrBuf);
    uint32_t nContentPos = 0;
    uint32_t nContentLen = 0;
    int nRet = GetLength(arrBuf[0].buf, arrBuf[0].len, nContentPos, nContentLen);//检查http协议包是否完整
    if (nRet == -1)return false;//不支持的协议头解析
    if (0 == nRet) return true;//数据不全
    if (memcmp(arrBuf[0].buf, "GET ", 4) != 0)return false;//协议头错误
    auto pBegin = strstr(arrBuf[0].buf, "Sec-Web

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值