if (strnicmp(C->r_buffer.buf, "GET / HTTP", strlen("GET / HTTP")) == 0)
{
char key[100] = { 0 };
char sha[100] = { 0 };
char base64[100] = { 0 };
char *p = strstr(C->r_buffer.buf, "WebSocket-Key:");
p = &p[strlen("WebSocket-Key:")];
int pos = 0;
for (int i = 0; i < 50; i++)
{
if (*p == ' ')
{
*p = *p++;
continue;
}
if ((*p == '\r') || (*p == '\n') || (*p == '\r\n') || (*p == 10) || (*p == 13))
break;
key[pos++] = *p;
*p = *p++;
}
strcat(key, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
//memset(key, 0, sizeof(key));
//strcat(key, "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
strcat(sha, StrSHA1(key, strlen(key), base64));
ToBase64(sha, strlen(sha), base64);
sprintf(C->w_buffer.buf, "HTTP / 1.1 101 Switching Protocols\r\n"\
"Content - Length: 0\r\n"\
"Upgrade : websocket\r\n"\
"Sec - Websocket - Accept : %s\r\n"\
"Server : TornadoServer / 4.5.1\r\n"\
"Connection : Upgrade", base64);
C->w_buffer.len = strlen(C->w_buffer.buf);
printf("len:%d\n%s", C->w_buffer.len, C->w_buffer.buf);
C->w_count = strlen(C->w_buffer.buf);
Send_Data(C);
}
以上代碼是在websocket連接時,發送握手資訊,但老是不成功不知道是什么原因,請高手指點下,留下QQ最好。
uj5u.com熱心網友回復:
好吧自己回復了,已解決uj5u.com熱心網友回復:
VC.NET 是什么 我居然沒聽過...
uj5u.com熱心網友回復:
你這里面的 *p==\r\n地方有個bug,\r\n是個字串不是字符,比較的時候會出問題,單字符比較會忽略\nuj5u.com熱心網友回復:
請問一下樓主是怎么解決的?我也遇到同樣的問題轉載請註明出處,本文鏈接:https://www.uj5u.com/net/83732.html
標籤:VC.NET
