websocket传输数据大小限制,突破126个字节
2022-04-07 14:35阅读:
TEL:17361905260 QQ:705506332
在做数据采集前端呈现时候,采用了WEBSOCKT通讯方式。
问题1.当服务器传回的TXT超过125个字节时候,WEB无法接收到数据
问题2.当超过126个字节时候
CString strMfc;
strMfc=outFrame.c_str();
int
len=strMfc.GetLength();
总显示LEN=2;
问题2,找半天发现。outFrame第三个字节=0x00 导致;
经过几轮测试。终于解决了以上问题。
代码如下:
int ret = WS_EMPTY_FRAME;
int messageLength = inMessage.size();
int frameHeaderSize=0;
if(messageLength<126)
{
//先处理头
frameHeaderSize=2;
char *frameHeader = new char[2];
memset(frameHeader, 0, frameHeaderSize);
frameHeader[0] =(char) 0x81;
frameHeader[1] =
messageLength;
// 填充数据
unsigned long frameSize = frameHeaderSize +
messageLength;
char
*frame = new char[frameSize + 1];
memcpy(frame, frameHeader, frameHeaderSize);
memcpy(frame + frameHeaderSize, inMessage.c_str(),
messageLength);
frame[frameSize] = '\0';
outFrame = frame;
CString strMfc;
strMfc=outFrame.c_str();
int
len=strMfc.GetLength();
send(g_NetWorkClient[current_sokcet_num].sock,strMfc,len,0);
delete[] frame;
delete[] frameHeader;
}
else if (messageLength < 0xFFFF)
{
//先处理头
frameHeaderSize=4;
char* frameHeader = new char[4];
memset(frameHeader, 0,
frameHeaderSize);
frameHeader[0] = (char)0x81;
frameHeader[1] = (char)0x7e;
frameHeader[2] = (
char)((messageLength>>8)&0xff);
frameHeader[3] = (char)(messageLength & 0xFF);
// 填充数据
unsigned long frameSize = frameHeaderSize +
messageLength;
char
*frame = new char[frameSize + 1];
memcpy(frame, frameHeader, frameHeaderSize);
memcpy(frame + frameHeaderSize, inMessage.c_str(),
messageLength);
frame[frameSize] = '\0';
send(g_NetWorkClient[current_sokcet_num].sock,frame,frameSize,0);
delete[] frame;
delete[] frameHeader;
}
采用VC++编写