錯誤:A server must not mask any frames that it sends to the client。WebSocket 規範規定 Client→Server 必須掩碼,Server→Client 絕不可掩碼。手動組幀時若錯誤設定 Mask bit = 1,瀏覽器會直接斷線。
FIN=1, RSV=0, Opcode=0x1 (Text)Mask=0Payload length (7/16/64 位編碼)Payload data (UTF-8 字串)// 錯誤:設定了 Mask bit
char frame[] = {0x81, 0x80 | len, ...}; // 第2 byte 最高位為 Mask
// 正確:Mask=0
uint8_t frame[2 + len];
frame[0] = 0x81; // FIN=1, Text
frame[1] = len < 126 ? len : (len < 65536 ? 126 : 127);
// 若 len>=126 需額外寫入 2/8 bytes 長度
memcpy(frame+2, payload, len);
send(socket, frame, 2+len, 0);
**不要手工組幀**,直接用成熟庫:
Boost.Beast, uWebSockets, libwebsocketsws, socket.ioJava-WebSocket, Nettygorilla/websocket庫會自動處理幀封裝、掩碼、分片、心跳、重連等細節。