C++中的Websocket服务器发送消息时出错
Websocket Server in C++ Error on sending message
我一直在开发C++websocket服务器,它运行得很好,除了一个我不理解的错误。
问题是,我可以接收数据并执行网络浏览器声称的操作,但假设服务器第一次成功发送时需要发回一些信息,但当我重复相同的请求(或另一个需要信息返回浏览器的请求)时,我的服务器会尝试发送它(显然成功了),然后自己再次发送(我不知道为什么),然后连接关闭。
这是我发送信息的代码:
int CSocketNode::SendMsg(const char opr, const char* cad,int length){
if (socket_conn == INVALID_SOCKET)
return -1;
int pos = 0;
int result = 0;
memset(Buffer_out, 0, BUFFER_SIZE);
if(!webSocket){
//Build header
Buffer_out[pos] = 57; //12345 % 256;
Buffer_out[pos + 1] = 48; //12345 / 256;
length++;
if((length / 256) >= 256){
int divi = length / 256;
Buffer_out[pos + 2] = length % 256;
Buffer_out[pos + 3] = divi % 256;
Buffer_out[pos + 4] = divi / 256;
} else {
Buffer_out[pos + 2] = length % 256;
Buffer_out[pos + 3] = 0;
Buffer_out[pos + 4] = length / 256;
}
Buffer_out[pos + 5] = opr;
pos = 5;
memcpy(Buffer_out + pos + 1, cad, length);
} else {
Buffer_out[pos++] = 0x81;
length++;
if(length <= 125){
Buffer_out[pos++] = length;
} else if(length <= 65535) {
Buffer_out[pos++] = 126;
Buffer_out[pos++] = (length >> 8) & 0xff;
Buffer_out[pos++] = length & 0xff;
} else {
Buffer_out[pos++] = 127;
memset(Buffer_out + pos, 0, 8);
for (int i = 7; i >= 0; i--){
Buffer_out[pos++] = (length >> 8*i) & 0xff;
}
}
Buffer_out[pos++] = opr;
memcpy(Buffer_out + pos, cad, length);
}
printf("0: %d, 1: %d, 2: %d, 3: %d, 4: %d. Pos = %dn", Buffer_out[0], Buffer_out[1], Buffer_out[2], Buffer_out[3], Buffer_out[4], pos);
printf("%sn", Buffer_out + pos);
result = SendBytes(Buffer_out, length + pos);
return result;
}
int CSocketNode::SendBytes(char *cad, int length){
//Send it
int err = send(socket_conn, cad, length,0);
if (err == SOCKET_ERROR ){
Error("SendBytes Error");
return -1;
}
return 0;
}
IF句子的第一部分是针对我的非网络浏览器客户端的,它非常有效。
无论数据帧是什么大小,小于125或小于65535,结果都是一样的。
也许我错过了什么。也许我必须在消息的wnd添加一条FIN消息。但根据WebSocket手册,它是消息的第一位,指示它是否是多个消息中的一个。
如果你能告诉我它是什么,我将非常感激。
我自己解决了。由于一些我无法猜测的原因,memcpy使套接字管道无法正常工作。
所以我使用了一个for循环将消息复制到缓冲区。并且解决了。
相关文章:
- boost::进程间消息队列引发错误
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- 显示错误消息框时出错.我该如何显示它
- 在 C++11 中使用 decltype() 时出错(在 gcc 4.7.0 中创建不透明的错误消息)
- C++中的Websocket服务器发送消息时出错
- 视觉对象C++窗体、简单消息框和将文本从文本字段分配给字符串时出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错