Winsock 从服务器接收乱码数据
winsock receiving gibberish data from server
我正在从指定地址的端口 80 的服务器接收数据,但是当我调用 recv(( 时,它会返回一些奇怪的字符。我正在尝试使用 winsock 构建代理服务器。我将 recv(( 函数的缓冲区大小减小了 1,为空终止字符留出空间,但仍然收到相同的东西。
接收代码:
int receive(SOCKET &socket)
{
char buffer[1024] = { 0 };
int n;
int total = 0;
fd_set set;
struct timeval timeout;
FD_ZERO(&set);
FD_SET(socket, &set);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
while (1) {
int rv = select(socket + 1, &set, NULL, NULL, &timeout);
if (rv == SOCKET_ERROR)
{
cout << "SOCKET ERROR: " << rv << endl;
}
else if (rv == 0)
{
cout << "timeout" << endl;
break;
}
else
{
n = recv(socket, buffer, 1023, 0);
if (n == SOCKET_ERROR)
{
cout << "read failed" << endl;
}
else if (n == 0)
{
cout << "nothing received" << endl;
break;
}
else
{
cout << buffer << endl;
total = total + n;
}
}
}
return total;
}
来自服务器的文本:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
X-Frame-Options: SAMEORIGIN
X-Request-Guid: 762c1b9c-c1ce-466c-b19b-83e53cedc996
Content-Length: 21842
Accept-Ranges: bytes
Date: Mon, 06 Feb 2017 16:28:57 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-lcy1143-LCY
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1486398537.023528,VS0,VE90
Vary: Accept-Encoding
X-DNS-Prefetch-Control: off
‹–ª1Í&ÐÅ•ÆL§ë'ÐJ©ÞFío-Ë[)yLë%Ùþ9¶?^Ž?jzHû55q$–V"¨{Û.èáõ‚Ž©BØevNàÍd"l0µòzic“W7‹éÀ–¸çÐ%…Z•ûæ¬ä]Rݪ”íUÙ¢°9fSã¿u¿EÕî¯ £-J⎘ƒÛˆžÚ±ë2ŽµkÏ鮥ª¤(#Œi¥TŠ;Œ€$Ô$ j0è¨Æ€ìO¤‘Å=dšPÙÃ~ëJ„ÐÜz!PJ¬ f-[[¼€
öU;’}Tï¨$`'LE^mŒY{Df@»Ú°È#–ÆÀX£ÌØH¼Û¦ª
:Ñý•Ú£c_§=ŠD“†Ti“äN«ä3X-&"ÂUâwµ©Ú¤,ZuÌ¢&ëY¯Rê„~6]¯¯¼AÁ`ú»…ûOxä9ó+ó€³%H#ø!n¨UÛ¿Ž½7³M«Ü!v)|^CŒ5££"»¾›ñÿÚn¸g÷n¦í†ÿÚ®;¾NÛ9÷¦Õþc+}.-ƒWAÄsÚyq!ï‚ÆÒ›u/0m¤2¦JõQé5bª†R§ÛÒS%D@ÖT×|o}"<Uf¦Z.2¼yô¤Àí¸6»ã1Ǹ<6Y@^fºBSeÆï<f‘xšéS¥ø5tgrHó#µe4@ òê•™ÌbºY‹HRUÓ#AëÈ.†™Ÿˆ„—KUØ52¥ñN³_
PæÜÈJ¨p·¡…ÖLd鸫ͬ€¬¼iÌŒ6÷:½vFà°À4°°®ý—xãUt!®,`ˆaÊ7é,a|l2¿uaÊ/ð˜SßMæ<À¦J¿y®ÍæV¹H½ÌYCÛµSçu«ˆ†é3î¢ýö@We§T•aÕ?•‘&8×!žÿV}) ¾¶^Á62þ`uÒØ¡ñ—ˬíéS²½¹äü#z€r™½.ýÁ˜Y#Qô¼›pú}"žê¶»í8©Ö¥¼ïR0Dæók´ÌîÎxYxÑåßsð!¶ÔÍÐÈÆ1÷ºƒvg)Æ©mTYòkÃ&TlgœnŒ
如标题中指定 - "内容编码:gzip" - 数据被压缩。
如果你想看它,你需要解压它。
相关文章:
- 将相机数据从服务器实时流式传输到客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- Arduino UNO+SIM800L-向服务器发送数据
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- Java 客户端C++服务器数据发送/接收问题
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 通过TCP将数据从C++客户端发送到JSON服务器
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++中从客户端到服务器的数据传输问题
- Qt TCP服务器不从客户端读取数据
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应