代码拉取完成,页面将自动刷新
同步操作将从 文弱书生老方丈/HTTP项目 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "Common.h"
class Util
{
public:
static bool CutString(const std::string &str, std::string &leftOut, std::string &rightOut, const std::string &sep)
{
size_t pos = str.find(sep);
if(pos != std::string::npos)
{ // 可以分割
leftOut = str.substr(0, pos);
rightOut = str.substr(pos + sep.size());
return true;
}
return false;
}
// 读取单行的时候可能是\r\n结尾,也可能是\r结尾,还可能是\n结尾,统一都按照以\n结尾来处理。
static int ReadLine(int sock, std::string &out)
{
// ch只要初始不是\r、\n就行
char ch = 'X';
while (ch != '\n')
{ // 统一设置为以\n结尾
ssize_t s = recv(sock, &ch, 1, 0);
if(s > 0)
{
if (ch == '\r')
{ // 查看下一位是啥
recv(sock, &ch, 1, MSG_PEEK); // 窥探下一位是啥
if (ch == '\n')
{ // 如果是\n就直接读走,后面正好直接push_back
recv(sock, &ch, 1, 0); // 直接读走,把ch中的\r覆盖为\n
}
else
{ // 不是\n,表示\r后面是有用数据,不能读走
ch = '\n'; // 直接将ch中的\r覆盖为\n,这样就在push_back的时候只会有\n
}
}
// ch走到这里就只有两种情况:非\r、\n的普通字符 和 \n
out.push_back(ch); // 放到其中就ok
}
else if(s == 0)
{
return 0;
}
else
{
return -1;
}
}
return out.size();
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。