首先需要一个差不多的String
我实际上是不喜欢c++的,写起来不仅心智负担太重,还特别简陋。听说c++20马上要出来了,虽然我连c++11都不怎么会,17更不用说,但我估计c++入门书籍快2000页了,估计依旧是标准库里没有网络库,也没有库管理工具,我永远喜欢c#及Nuget.
stl中的string过于简陋,写习惯c#过来感觉就是简直不能用,不过性能还行。为了容易移到其他项目上,oop的封装,solid的开闭原则,继承string自己实现MyString 是最好的选择,后面可能随时修改
项目代码仓库 GitHub
class MyString:public string
{
public:
MyString()=default;
~MyString()=default;
template<class T>
MyString(T&& arg) :string(forward<T>(arg))
{
}
vector<MyString> Split(MyString flag,bool SkipEmpty=true)
{
vector<MyString> return_data;
int pos = find(flag);
bool FirstLine = true;
while (pos!=-1)
{
MyString line;
auto PushData=[&return_data,SkipEmpty](MyString line){
if (line.length() != 0 || !SkipEmpty)
{
return_data.push_back(line);
}
};
if (FirstLine)
{
line = substr(0, pos);
PushData(line);
FirstLine = false;
}
else
{
int right = find(flag, pos+1);
int left = pos + flag.length();
if (right==-1)
{
line = substr(left);
PushData(line);
break;
}
line = substr(left, right - left);
PushData(line);
pos = right;
}
}
return return_data;
}
vector<MyString> Split(char flag='\n')
{
vector<MyString> return_data;
istringstream data;
data.str(data());
string temp;
while (getline(data,temp,flag))
{
return_data.push_back(temp);
}
return return_data;
}
MyString Trim(char target=' ')
{
int left=find_first_not_of(target);
int right = find_last_not_of(target);
return substr(left, right-left+1);
}
private:
};
socket,http是什么东西?这个直接看其他人的,
首先http是基于tcp
图来自其他人,侵删
使用socket来进行Http请求数据需要经过
获取一个套接字
SOCKET GetSocket(int port, bool IsServer = false)
{
//初始化。,WSA windows异步套接字
WSADATA inet_WsaData;//
WSAStartup(MAKEWORD(2, 0), &inet_WsaData);//socket2.0版本
if (LOBYTE(inet_WsaData.wVersion) != 2 || HIBYTE(inet_WsaData.wVersion) != 0)
{
//高位字节指明副版本、低位字节指明主版本
WSACleanup();
return -1;
}
auto tcp_socket = socket