html5 websocket c++,C++ 实现的 WebSocket 服务器

详细介绍请看 (授权协议 Apache)

http://www.codeproject.com/Articles/371188/A-Cplusplus-Websocket-Server-For-realtime-interact

1.[文件] AllInOne.zip ~ 349KB     下载(1292)

2.[文件] PushFramework.zip ~ 188KB     下载(519)

3.[文件] WebClient.zip ~ 117KB     下载(656)

4.[文件] WebsocketProtocol.zip ~ 22KB     下载(602)

5.[文件] WebsocketServer.zip ~ 10KB     下载(916)

6.[图片] 运行界面截图

23070400_lJVP.png

7.[代码][C/C++]代码

int WebsocketProtocol::tryDeframeIncomingPacket( PushFramework::DataBuffer& buffer, PushFramework::IncomingPacket*& pPacket, int& serviceId, unsigned int& nExtractedBytes, ConnectionContext* pContext )

{

if (buffer.GetDataSize() == 0)

return Protocol::eIncompletePacket;

WebsocketConnectionContext* pCxt = (WebsocketConnectionContext*) pContext;

if (pCxt->GetStage() == WebsocketConnectionContext::HandshakeStage)

{

WebsocketHandshakeMessage* pMessage = new WebsocketHandshakeMessage(buffer.GetBuffer(), buffer.GetDataSize());

serviceId = 0;

nExtractedBytes = buffer.GetDataSize();

pPacket = pMessage;

return Protocol::Success;

}

//In the other cases, we should expect a data message :

int nMinExpectedSize = 6;

if (buffer.GetDataSize() < nMinExpectedSize)

return Protocol::eIncompletePacket;

BYTE payloadFlags = buffer.getAt(0);

if (payloadFlags != 129)

return Protocol::eUndefinedFailure;

BYTE basicSize = buffer.getAt(1) & 0x7F;

unsigned __int64 payloadSize;

int masksOffset;

if (basicSize <= 125)

{

payloadSize = basicSize;

masksOffset = 2;

}

else if (basicSize == 126)

{

nMinExpectedSize += 2;

if (buffer.GetDataSize() < nMinExpectedSize)

return Protocol::eIncompletePacket;

payloadSize = ntohs( *(u_short*) (buffer.GetBuffer() + 2) );

masksOffset = 4;

}

else if (basicSize == 127)

{

nMinExpectedSize += 8;

if (buffer.GetDataSize() < nMinExpectedSize)

return Protocol::eIncompletePacket;

payloadSize = ntohl( *(u_long*) (buffer.GetBuffer() + 2) );

masksOffset = 10;

}

else

return Protocol::eUndefinedFailure;

nMinExpectedSize += payloadSize;

if (buffer.GetDataSize() < nMinExpectedSize)

return Protocol::eIncompletePacket;

BYTE masks[4];

memcpy(masks, buffer.GetBuffer() + masksOffset, 4);

char* payload = new char[payloadSize + 1];

memcpy(payload, buffer.GetBuffer() + masksOffset + 4, payloadSize);

for (unsigned __int64 i = 0; i < payloadSize; i++) {

payload[i] = (payload[i] ^ masks[i%4]);

}

payload[payloadSize] = '\0';

WebsocketDataMessage* pMessage = new WebsocketDataMessage(payload);

serviceId = 1;

nExtractedBytes = nMinExpectedSize;

pPacket = pMessage;

delete payload;

return Protocol::Success;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值