1 Star 0 Fork 4

ximen_ww/HttpServer

forked from 林慢慢/HttpServer 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Util.hpp 2.25 KB
一键复制 编辑 原始数据 按行查看 历史
林慢慢 提交于 2023-03-10 20:49 . DEBUG
#pragma once
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
// 声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
// 静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。
// 综上,这个Util类的两个成员都设计成静态成员函数,这样不需要实例化类就能调用
class Util{
public:
// 读取一行:不同的操作系统的行分隔符可能不同,\r、\n或者\r\n,下面统一处理成\n
static int ReadLine(int sock, std::string& out)
{
char ch = 'x';//ch只要不初始化为\n即可(保证能够进入while循环)
while(ch != '\n')
{
ssize_t size = recv(sock, &ch, 1, 0);
if (size > 0)
{
if (ch == '\r')
{
recv(sock, &ch, 1, MSG_PEEK);// 窥探下一个字符是否为\n
if (ch == '\n')// 下一个字符是\n
{
recv(sock, &ch, 1, 0); // //\r\n->\n
}
else // 下一个字符不是\n
{
ch = '\n'; // \r->\n
}
}
// 普通字符或\n
out.push_back(ch);
}
else if (size == 0)// 对方关闭连接
{
return 0;
}
else // 读取失败
{
return -1;
}
}
return out.size(); //返回读取到的字符个数
}
// 分割字符串
static bool CutString(std::string& target, std::string& sub1_out, std::string& sub2_out, std::string sep)
{
size_t pos = target.find(sep, 0);
if (pos != std::string::npos)
{
sub1_out = target.substr(0, pos);
sub2_out = target.substr(pos + sep.size());
return true;
}
return false;
}
private:
};
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/ximen-ww/HttpServer.git
git@gitee.com:ximen-ww/HttpServer.git
ximen-ww
HttpServer
HttpServer
master

搜索帮助