MyHttp,从socket开始实现一个服务器及Http请求类 [0]

本文介绍了作者使用C++实现MyHttp的过程中,从创建自定义String类到利用Socket进行HTTP请求的基本步骤。通过获取套接字、建立连接、发送请求和接收响应,初步实现了简单的HTTP请求功能。同时,作者分享了对C++和C#的个人看法,并预告后续将完善项目并考虑使用线程池。
摘要由CSDN通过智能技术生成

首先需要一个差不多的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值