Я пытаюсь провести рукопожатие между моим WinSock-клиентом и эхо-сервером WebSocket (в моем случае wss: //echo.websocket.org, от https://www.websocket.org/echo.html). Как я понимаю, он подключается нормально, нет ошибки. Также нет ошибок при попытке отправить заголовок рукопожатия, но при получении я получаю 0.
Некоторые фрагменты кода:
string ipAddress = "174.129.224.73";//echo.websocket ip address
int port = 443; // Listening port # on the server
// Initialize WinSock
WSAData data;
WORD ver = MAKEWORD(2, 2);
int wsResult = WSAStartup(ver, &data);
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(port);
inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr);
// Connect to server
int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint));
string header = "GET wss://echo.websocket.org/ HTTP/1.1\r\n"
"Host: echo.websocket.org\r\n"
"Upgrade: websocket\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Key: BJZcwnjVSapHLie3s8n0yA==\r\n"
"Origin: http://localhost\r\n"
"Sec-WebSocket-Protocol: chat, superchat\r\n"
"Sec-WebSocket-Version: 13\r\n\r\n";
int sendResult = send(sock, header.c_str(), header.length() + 1, 0);
// Do-while loop to send and receive data
char buf[4096];
int bytesReceived = recv(sock, buf, 4096, 0);
....
И здесь recv возвращает 0, но, если все будет хорошо, должен вернуть заголовок ответа.
Итак, теперь я застрял, и любое предложение очень помогло бы ...
Также я был бы очень благодарен, если бы кто-то порекомендовал любой другой нативный / облегченный (только заголовок) c ++ lib для легкой работы с веб-сокетами
Заранее спасибо!