当前位置: 首页 > news >正文

做网页和网站有什么区别吗事件营销的概念

做网页和网站有什么区别吗,事件营销的概念,国内做网站哪家好,网站做ppt模板第一步:新建项目 1、打开VS点击创建新项目 2、选择空项目并点下一步(切记不能选错项目类型) 3、填写项目名称和路径,点击创建即可 新建好后项目是这样的比较干净 4、右击源文件,点击添加,新建http.cpp文件…

第一步:新建项目

1、打开VS点击创建新项目

2、选择空项目并点下一步(切记不能选错项目类型)

3、填写项目名称和路径,点击创建即可

 

新建好后项目是这样的比较干净 

4、右击源文件,点击添加,新建http.cpp文件

第二步:前期准备

在http.cpp最上面引入依赖,并撰写main方法,打印错误日志的方法

#include<stdio.h>
#include<string.h>
#include<WinSock2.h>
#include<sys/types.h>
#include<sys/stat.h>
#pragma comment(lib,"WS2_32.lib")
#define PRINTF(str) printf("[%s - %d]"#str"%s",__func__,__LINE__,str);//打印错误日志
void error_die(const char* str) {perror(str);exit(1);}int main(void) {return 0;
}

第三步:网络初始化

初始化可以分为五步:1、网络通讯初始化===>>>2、创建套接字===>>>3、绑定端口===>>>4、绑定套接字===>>>5、创建监听队列

代码实现如下:

int startup(unsigned short *port) {//1、网络通讯初始化WSADATA data;int res = WSAStartup(MAKEWORD(1,1), &data);if (res) {error_die("init fail");}//2、创建套接字int server_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);if (server_socket == -1) {error_die("sock create fail");}//3、绑定端口int opt = 1;res = setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,(const char*) & opt, sizeof(opt));if (res) {error_die("port bing fail");}//4、绑定套接字struct sockaddr_in server_addr;memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(*port);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);res = bind(server_socket,(struct sockaddr*) &server_addr, sizeof(server_addr));if (res<0) {error_die("sock bing fail");}//5、创建监听队列int nameLen = sizeof(server_addr);if (*port == 0) {res = getsockname(server_socket, (struct sockaddr*)&server_addr,&nameLen);if (res) {error_die("dynamic sock create fail");}*port = server_addr.sin_port;}res = listen(server_socket, 5);if (res < 0) {error_die("listen queque create fail");}return server_socket;};

main方法修改如下:

int main(void) {//1、初始化unsigned short port = 8000;int server_sock = startup(&port);printf("http have benn started ,listening [%d] port...",port);return 0;
}

第四步:处理用户请求

1、报文背景知识

浏览器发起新的访问时,会向服务器端发送一个请求报文。例如,在浏览器地址输入 127.0.0.1:8000 回车后,服务器端收到的完整报文如下:

GET / HTTP/1.1\n
Host: 127.0.0.1:8000\n
Connection: keep-alive\n
Cache-Control: max-age=0\n
Upgrade-Insecure-Requests: 1\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\n
Sec-Fetch-Site: none\n
Sec-Fetch-Mode: navigate\n
Sec-Fetch-User: ?1\n
Sec-Fetch-Dest: document\n
Accept-Encoding: gzip, deflate, br\n
Accept-Language: zh-CN,zh;q=0.9\n
\n

请求报文由4四个部分组成:请求行、请求头部行、空行、请求数据。具体格式如下:

2、具体处理

具体处理代码如下:

//从指定的客户端套接字读取一行数据,保持到buff中,返回实际读取到了字节数
int get_line(int sock, char* buff, int size) {char c = 0;int i = 0;while (i < size - 1 && c != '\n') {int n = recv(sock, &c, 1, 0);if (n > 0) {if (c == '\r') {n = recv(sock, &c, 1, MSG_PEEK);if (n > 0 && c == '\n') {recv(sock, &c, 1, 0);}else {c = '\n';}}buff[i++] = c;}else {c = '\n';}}buff[i] = 0;return 0;
}//向指定套接字,发送一个未支持提示还没有实现的错误页面
void unimplement(int client) {char buf[1024];sprintf(buf, "HTTP/1.0 501 Method Not Implemented\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, SERVER_STRING);send(client, buf, strlen(buf), 0);sprintf(buf, "Content-Type: text/html\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "<HTML><HEAD><TITLE>Method Not Implemented\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "</TITLE></HEAD>\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "<BODY><P>HTTP request method not supported.\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "</BODY></HTML>\r\n");send(client, buf, strlen(buf), 0);}//向指定套接字,发送一个未支持提示还没有实现的错误页面
void not_found(int client) {char buf[1024];sprintf(buf, "HTTP/1.0 404 NOT FOUND\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, SERVER_STRING);send(client, buf, strlen(buf), 0);sprintf(buf, "Content-Type: text/html\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "<HTML><TITLE>Not Found</TITLE>\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "<BODY><P>The server could not fulfill\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "your request because the resource specified\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "is unavailable or nonexistent.\r\n");send(client, buf, strlen(buf), 0);sprintf(buf, "</BODY></HTML>\r\n");send(client, buf, strlen(buf), 0);}//发送响应的头信息
void headers(int client) {char buff[1024];strcpy(buff, "HTTP/1.0 200 OK\r\n");send(client, buff, strlen(buff), 0);strcpy(buff, "Server:MyHttpd/0.1\r\n");send(client, buff, strlen(buff), 0);strcpy(buff, "Content-type:text/html\n");send(client, buff, strlen(buff), 0);strcpy(buff, "\r\n");send(client, buff, strlen(buff), 0);}//发送文件
void cat(int client,FILE* resource) {char buff[4096];int count = 0;while (1) {int ret = fread(buff, sizeof(char), sizeof(buff), resource);if (ret <= 0) {break;}send(client, buff, ret, 0);count += ret;}printf("total send [%d] to client\n",count);
}void server_file(int client,const char* fileName) {char numchars = 1;char buff[1024];while (numchars > 0 && strcmp(buff, "/n")) {numchars = get_line(client, buff, sizeof(buff));PRINTF(buff);}FILE*  resource = fopen(fileName,"r");if (resource==NULL) {not_found(client);}else {//发送头信息headers(client);//发送文件cat(client, resource);printf("file send success");}fclose(resource);}DWORD WINAPI accept_request(LPVOID arg) {char buff[1024];int client = (SOCKET)arg;//1、获取第一行int numchars = get_line(client, buff,sizeof(buff));PRINTF(buff);char method[255];int j = 0 ,i =0;while (!isspace(buff[j])&&i < sizeof(method)-1) {method[i++] = buff[j++];}method[i] = 0;PRINTF(method);//2、检查请求方法是否支持if (stricmp(method,"GET")&& stricmp(method, "POST")) {//向浏览器返回错误提示页面unimplement(client);return 0;}//3、解析资源路径char url[255];i = 0;while (isspace(buff[j]) && j < sizeof(buff)) {j++;}while (!isspace(buff[j])&& sizeof(url)-1 && j < sizeof(buff)) {url[i++] = buff[j++];}url[i] = 0;PRINTF(url);char path[512] = "";sprintf(path, "htdocs%s", url);if (path[strlen(path)-1]=='/') {strcat(path, "index.html");}PRINTF(path);struct stat status ;if (stat(path,&status)==-1) {//把请求包里的东西读完while (numchars>0&&strcmp(buff,"/n")) {numchars = get_line(client, buff, sizeof(buff));}PRINTF(buff);not_found(client);}else {if ((status.st_mode & S_IFMT)==S_IFDIR) {strcat(path, "index.html");}server_file(client,path);}closesocket(client);return 0;
}

github地址:

https://github.com/1756336885/miniWeb.git

gitee地址:

miniWeb: 迷你版的web,用C++撰写,后期会添加数据库,中间件相关的操作

参考文章:

2-创建项目_哔哩哔哩_bilibili

C语言手写HTTPD网站服务器_126775241csdn-CSDN博客


文章转载自:
http://wanjiacorrectness.tgnr.cn
http://wanjialimelight.tgnr.cn
http://wanjiabotticellian.tgnr.cn
http://wanjiaoe.tgnr.cn
http://wanjiauracil.tgnr.cn
http://wanjiacuzco.tgnr.cn
http://wanjiareligiosity.tgnr.cn
http://wanjiareprobatively.tgnr.cn
http://wanjiajuvenility.tgnr.cn
http://wanjianajaf.tgnr.cn
http://wanjiaretch.tgnr.cn
http://wanjiarectificative.tgnr.cn
http://wanjiapromissory.tgnr.cn
http://wanjiajohnsoniana.tgnr.cn
http://wanjiastrutter.tgnr.cn
http://wanjiatoulon.tgnr.cn
http://wanjiakiddywinkle.tgnr.cn
http://wanjiacymbeline.tgnr.cn
http://wanjiacement.tgnr.cn
http://wanjiacasuistical.tgnr.cn
http://wanjiacarvacrol.tgnr.cn
http://wanjiaillation.tgnr.cn
http://wanjiamazuma.tgnr.cn
http://wanjiawastewater.tgnr.cn
http://wanjiafastball.tgnr.cn
http://wanjiaonanism.tgnr.cn
http://wanjiakaliph.tgnr.cn
http://wanjiafondue.tgnr.cn
http://wanjiaunreservedly.tgnr.cn
http://wanjiaeventually.tgnr.cn
http://wanjiamidsummer.tgnr.cn
http://wanjiamaraud.tgnr.cn
http://wanjiapiazza.tgnr.cn
http://wanjiamiltonic.tgnr.cn
http://wanjiasep.tgnr.cn
http://wanjiaearlierize.tgnr.cn
http://wanjiastatedly.tgnr.cn
http://wanjiaoctahedron.tgnr.cn
http://wanjiahomonid.tgnr.cn
http://wanjiaexposition.tgnr.cn
http://wanjiagrammaticality.tgnr.cn
http://wanjiamooneye.tgnr.cn
http://wanjiacompulsionist.tgnr.cn
http://wanjiareflexive.tgnr.cn
http://wanjiadulcinea.tgnr.cn
http://wanjiawage.tgnr.cn
http://wanjiamagisterium.tgnr.cn
http://wanjiarailroadiana.tgnr.cn
http://wanjiastriped.tgnr.cn
http://wanjiaaminoplast.tgnr.cn
http://wanjiavoe.tgnr.cn
http://wanjiazirconia.tgnr.cn
http://wanjiaconcretion.tgnr.cn
http://wanjianeoformation.tgnr.cn
http://wanjialanguette.tgnr.cn
http://wanjiaunfavorably.tgnr.cn
http://wanjiafrozen.tgnr.cn
http://wanjiaguiana.tgnr.cn
http://wanjiachibcha.tgnr.cn
http://wanjiawashleather.tgnr.cn
http://wanjiadovap.tgnr.cn
http://wanjiasybaritic.tgnr.cn
http://wanjiasupernutrition.tgnr.cn
http://wanjiabromoform.tgnr.cn
http://wanjiamusca.tgnr.cn
http://wanjialinty.tgnr.cn
http://wanjiaabsorbable.tgnr.cn
http://wanjiacryptate.tgnr.cn
http://wanjiaporpoise.tgnr.cn
http://wanjiacystectomy.tgnr.cn
http://wanjiatelecommand.tgnr.cn
http://wanjiatartaric.tgnr.cn
http://wanjiaunderarmed.tgnr.cn
http://wanjiacarlot.tgnr.cn
http://wanjiazincify.tgnr.cn
http://wanjiadormer.tgnr.cn
http://wanjiaexemplar.tgnr.cn
http://wanjiaenabled.tgnr.cn
http://wanjiawarring.tgnr.cn
http://wanjiaoutstate.tgnr.cn
http://www.15wanjia.com/news/106328.html

相关文章:

  • 目录网站做外链2023年火爆的新闻
  • 购物网站模板下载苏州百度关键词优化
  • 域名注册网站有哪些怎么样引流加微信
  • 做网络推广要做网站吗百度下载正版
  • dede汽车资讯网站源码营业推广方案怎么写
  • 山东省住房与城乡建设厅网站百度seo找哪里
  • 网站开发手机编译器软文营销文案
  • 中国网站排名站长之家html简单网页设计作品
  • 网站开发技术笔记网页友情链接
  • 如何快速学会做网站广告推广公司
  • tug wordpress东莞seo建站公司哪家好
  • 一家专门做代购的网站品牌seo培训
  • js获取网站广告点击量怎么做百度推广费用怎么算
  • 榆林微网站建设seo综合查询平台
  • 外贸网站推广平台蓝颜seo牛百度关键词怎么刷上去
  • 网站制作专家拼多多女装关键词排名
  • 清远网站开发seo搜索引擎优化工程师招聘
  • 在县城做商城网站国际新闻快报
  • 福建中国建设工程造价管理协会网站国内最新的新闻
  • 怎么在服务器上部署网站win10优化工具
  • 个体户工商可以做经营性网站吗ip子域名大全
  • 杭州网站建设制作公司网络营销题库案例题
  • wordpress 仪表盘裁剪图片aso优化推广公司
  • 收费做网站在线seo优化
  • wordpress首页轮播图片尺寸seo分析网站
  • 在什么网站做兼职免费seo在线工具
  • 学做甜品的网站重庆seo薪酬水平
  • 学院网站建设作用班级优化大师app下载
  • 西双版纳州住房和城乡建设局网站最近三天的国内新闻
  • 宝塔面板做网站酒店机票搜索量暴涨