Helo。我正在研究C++ Websocket庫。一切都好,直到出現一個奇怪的問題。C++ Websocket recv 2個字節
int n = 0, n_add = 0;
char *buf = (char*)malloc(BUFLEN);
char new_buffer[4096];
while ((n = recv(client_id, buf, BUFLEN, 0)) > 0) {
strcat(new_buffer, buf);
int new_buffer_length = strlen(new_buffer);
int buf_length = strlen(buf);
n_add+= n;
// debug
cout << "buf: '" << buf << "'" << endl;
cout << "new_buffer_length: '" << new_buffer_length << "'" << endl;
cout << "buf_length: '" << buf_length << "'" << endl;
cout << "n: '" << n << "'" << endl;
cout << "n_add: '" << n_add << "'" << endl;
memset(buf, '\0', BUFLEN);
if (n_add == new_buffer_length && n < BUFLEN) {
cout << "new_buffer: '" << new_buffer << "'" << endl;
// if client is already connected
if (ws_clients[client_id][2] == WS_READY_STATE_OPEN) {
this->ws_client_message(client_id, new_buffer, new_buffer_length);
}
// if client needs a handshake
if (ws_clients[client_id][2] == WS_READY_STATE_CONNECTING) {
this->ws_client_handshake(client_id, new_buffer);
}
memset(&new_buffer, '\0', 4096);
n_add = 0;
FD_ZERO(&this->tmp_fds);
}
}
握手是完全藏漢做任何有效載荷小於126時是happends我得到這個:
buf: 'þ'
new_buffer_length: '2'
buf_length: '2'
n: '128'
n_add: '128'
buf: '½HÆA¯J'
new_buffer_length: '8'
buf_length: '6'
n: '6'
n_add: '134'
n個說我recived 128個字節,但實際上它是隻有2中,第二次給我6個字節,這些都沒問題。如果我改變我的限制爲128的BUFLEN並將其設置爲2,那麼除了最後一個循環之外,我會收到一切正常,它永遠不會達到134,實際有效負載長度。
好吧,如果大家有任何想法,我使用http://www.websocket.org/echo.html進行測試,我試了一切。請給我一些提示
它看起來像消息的第三個字節是一個NUL字節('\ 0')。這被'strcat'和'strlen'視爲字符串終結符。 –
是的,顯然第三個字節是NULL字節:)並且從那裏開始下坡。感謝你的快速回復! –