c语言实现https服务器(纯享版)

参考

1.90行代码实现C语言版https服务器,基于openssl
2.使用OpenSSL生成自签名SSL/TLS证书和私钥
注意:证书和私钥文件(server.crt,server.key)的生成请参考此链接

代码

#define SERVER_PORT 8080 //设置端口号
#include
#include
#include
#include 
#include  
#include
#include
#include
#ifdef _WIN32
#include 
// Windows 文件操作相关代码
#else
#include 
// Unix/Linux 文件操作相关代码
#endif
#pragma comment(lib, "Ws2_32.lib")

struct client_mes {
   //客户端请求信息结构体
	char IP[20];	//客户ip地址
	int PORT;	//客户端口号
	char method[10];//请求方法
	char url[1024];	 //请求url
	char version[10];//协议及版本信息
}c_mes;
struct kay_and_value {
   //每一个键值对结构体
	char key[10];
	char value[100];
};
struct url_mes {
   
	char path[100];//请求路径
	//采用结构体数组来存储键值对
	struct kay_and_value k_v[10];
	int k_v_len;//实际键值对个数
}u_mes;
char messages[1024] = {
   0};//存储返回信息的全局变量
//定义http响应行全局变量
char u200[] = "HTTP/1.0 200 OK\r\n";
char u400[] = "HTTP/1.0 400 BAD REQUEST\r\n";
char u404[] = "HTTP/1.0 404 NOT FOUND\r\n";
char u500[] = "HTTP/1.0 500 INTERNAL SERVER ERROR\r\n";
char u501[] = "HTTP/1.0 501 METHOD NOT IMPLEMENTED\r\n";
int main() {
   
	SSL_CTX* initSSL();
	int creat_socket_listen();
	char* get_path();
	void do_http_request(char buf[1024]);//对缓冲区接受到的客户请求信息进行解析
	int do_http_resolve(char url[1024], int clnt_sock);//对客户端请求进行响应
	void do_http_url_process(char url[1024]);//对客户端的url进行解析
	void do_http_response(int clnt_sock, const char* path);
	// 初始化键值对结构体数组
	for (int k = 0; k < 10; k++) {
   
		strcpy_s(u_mes.k_v[k].key, "");
		strcpy_s(u_mes.k_v[k].value, "");
	}
	memset(&c_mes, 0, sizeof(c_mes));//将结构体里面的数据清零
	memset(&u_mes, 0, sizeof(url_mes));

	// 初始化 Winsock 库
	WSADATA wsaData;
	int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
	if (result != 0) {
   
		fprintf(stderr, "WSAStartup failed with error code: %d\n", result);
		return 1;
	}
	//初始化ssl库
	SSL_CTX* ctx;
	ctx = initSSL();
	//初始化socket库并实现监听
	int serv_sock;
	serv_sock = creat_socket_listen();
	//接收客户端请求
	SSL* ssl;
	/*定义一个结构体,用于存储客户端的地址信息,包括IP地址和端口号
	*/
	struct

你可能感兴趣的:(c语言,c语言,https,服务器,ssl)