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

宁波网站优化公司推荐wordpress可以放视频吗

宁波网站优化公司推荐,wordpress可以放视频吗,wordpress搜索按分类,网页设计师月薪多少文章目录 效果展示整体架构流程技术细节完整代码 效果展示 例如#xff1a;htpp://192.168.23.140/home.html - 正确的请求格式 home.html 这个资源是放在我们服务器里面的 , 并不是随便访问的资源,当然我们可以放很多的资源进去. 整体架构流程 整个实现的流… 文章目录 效果展示整体架构流程技术细节完整代码 效果展示 例如htpp://192.168.23.140/home.html     -  正确的请求格式 home.html     这个资源是放在我们服务器里面的 , 并不是随便访问的资源,当然我们可以放很多的资源进去.  整体架构流程 整个实现的流程其实很简单 , 简单的网络编程基础 , 和对 http 协议格式的基础了解,想要实现并不难. 这里我会对 http协议格式 进行简单的说明. mini 版的实现 , 我们只处理 客户端发起的 get 请求  ,想要全部实现,还是很有难度的 .  补充 : HTTP协议的请求主要包括以下几种 GET从服务器获取资源通常用于请求页面、图片、视频等内容。 POST向服务器提交数据通常用于提交表单、上传文件等操作。 PUT将数据上传到指定的URI用于更新资源。 DELETE请求服务器删除指定的资源。 HEAD类似于GET请求但服务器只返回请求行和头部不返回实际内容用于获取资源的元信息。 OPTIONS查询支持的HTTP方法用于确定服务器支持的请求方法。 TRACE回显服务器收到的请求用于测试或诊断。 CONNECT用于代理服务器将连接转换为隧道。 技术细节 http 协议格式 :  初次基础这个协议的朋友 ,  有一个大概的印象就可以了 , 想要搞明白 http 协议也是相当有难度的  .  我们这里的实现没有那么复杂. 我们进行收发数据的时候 , 都是一行一行的读取 , 这个很重要 . 每行数据的结尾都有一个明显的标志 , 一个回车符 一个换行符 特别注意的是 : 消息报头 和 响应正文  ,  请求头部  和请求数据之间有一个 回车符 换行符. 我们在进行数据收发的时候要严格遵循协议的格式. 常见的错误 :  提示实现的模块说明 详细 API 说明 1 . 实现按行读取 , 严格按照 http  格式 , 每一行的尾部是一个  换行符回车符 是读取到尾部的重要标志 成功返回读取到的字符个数 ,失败返回 -1  int get_line(int sock , char *buf ,int size ){//每次读取一个字符int count 0 ; //当前已经读取到的字符大小char ch \0; int len 0 ;while( (count size -1) ch!\n){len read(sock , ch ,1);if( len 1 ){ //正常读取成功//处理 \r回车 \nif( ch\r) continue;else if(ch\n){//buf[count] \0; //手动添加字符串结束符break;}//处理一般的字符buf[count] ch;}else if( len 0 ){ //读取出错的情况perror(read fialed\n);count -1;break;}else { //len 0 的情况 客户端关闭了sock连接fprintf(stderr , client close\n);count -1 ;break;}}if( count 0) buf[count]\0;//if(Debug) printf(line information %s\n, buf);return count; } 2 .  处理客户端的请求  . 同时做好防御性编程 , 处理可能发生的情况 .  实现过程 :   返回值 和 参数 设置都是和主函数中的线程进行匹配.   读取http请求   解析 http 请求 . 都是按照上面 http 协议格式来的 , 如果不记得了 ,可以看看上面.  void* do_http_request(void* pclient_sock){//读取http请求//按行读取请求头部int len 0;char buf[256]{0};char method[64]{0}; //存放请求方法char url[256]{0};//存放url(请求的资源)char version[64]{0};//协议版本char path[256]{0};//url对应的路径int client_sock *(int *)pclient_sock ; len get_line(client_sock , buf ,sizeof(buf) );if( len 0 ){//读取到请求行int i0 , j0;while(!isspace(buf[j]) i sizeof(method)-1 ){method[i] buf[j];i;j;}method[i] \0;if(Debug) printf(request method %s\n,method );//判断是否GET方法,这个服务器我们只处理get请求if( strncasecmp( method ,GET,i)0 ){if(Debug) printf(method GET\n);//继续读取请求资源while(isspace(buf[j]));//跳过空格i 0;while(!isspace(buf[j]) i sizeof(url)-1){url[i] buf[j];i;j;}//手动加上字符串结束符url[i] \0;if(Debug) printf(request url %s\n,url);//printf(131 : %c\n,buf[j]);//读取协议版本while(isspace(buf[j]));//跳过空格i 0;while(!isspace(buf[j]) i sizeof(version)-1){version[i] buf[j];i;j;}//手动加上字符串结束符version[i] \0;if(Debug) printf(request version %s\n,version);//打印请求头部do{len get_line(client_sock , buf ,sizeof(buf) );printf(request head %s\n , buf );}while(len 0);//****定位到服务器本地的 html文件 ****//****如果需要修改资源 , 那么将这里的path 路径改成你自己资源对应的路径****//处理 url 中的?{char *pos strchr( url ,?);if(pos){*pos \0;printf(real url %s\n,url);}sprintf(path ,./html_file/%s, url );if(Debug) printf(path %s\n, path );//判断请求的资源是否存在 ,存在则进行响应struct stat st; //保存文件信息的结构体if( stat( path , st) -1 ){//如果不存在则响应 404 NOT FOUNDfprintf( stderr , stat :%s failed . reason :%s\n, path , strerror(errno));not_found( client_sock );}else{ //执行http响应if(S_ISDIR(st.st_mode)){ //如果是一个目录,则补全strcat(path , /indext.html);}//响应给客户端do_http_response(client_sock , path );}}}else{ //客户端的请求方式不是 get , 响应 501 Method Not Implementedfprintf(stderr ,warning other method[%s]\n,method);do{len get_line(client_sock , buf ,sizeof(buf) );printf(request head %s\n , buf );}while(len 0);//响应客户端 501 Method Not Implementedunimplemented(client_sock);} }else { //客户端发送的请求格式有问题 相应 400 BAD REQUESTbad_request( client_sock);}close(client_sock);if( pclient_sock )free(pclient_sock);return NULL; } 3 . 将请求的资源,响应给客户端 注意 : 我们在将客户端请求的资源发送给客户端的时候 . 在消息报头的最后  我们要还要发送  请求资源的大小( Content-Length:%ld\r\n\r\n ).  所以说在发送响应的时候 , 一般分两不进行: - 1. 先发送     状态行 消息报头 - 2 . 发送   响应正文 void do_http_response( int client_sock , const char *path ){FILE *fp NULL;fp fopen( path ,rb);if( fpNULL ){not_found(client_sock);return ;}//文件打开成功//1. 发送 http 头部 int ret header(client_sock , fp);//2. 发送http bodyif( !ret ){ cat(client_sock , fp);}//3. 清理资源fclose( fp ); } 4. 发送 http 头部  (状态行 消息报头 ) 成功返回 0  失败返回-1 int header(int client_sock ,FILE *fp){char buf[1024] { 0 };char temp[64];int fpId -1;struct stat st;strcat(buf , HTTP/1.1 200 OK\r\n);strcat(buf , Server:wServer\r\n);strcat(buf , Content-Type:text/html\r\n);strcat(buf , Connection:Close\r\n);fpId fileno( fp );if( fstat( fpId ,st) -1 ){//响应客户端 500 Internal Server ErrorInternal_Error(client_sock); return -1;}//将响应资源的大小加上snprintf( temp , 64 ,Content-Length:%ld\r\n\r\n , st.st_size );strcat( buf , temp);if(Debug) fprintf(stdout , header :%s\n, buf );if( send( client_sock , buf , strlen(buf) , 0 ) 0 ){fprintf( stderr , send failed . reason: %s\n, strerror(errno));return -1;}return 0; } 5. 发送响应资源 因为我们的资源里面包括了图片和音乐 所以在进行文件操作的时候,我们要以二进制的方式进行, 没次读取一个字节. void cat(int client_sock , FILE *fp){char buf[1024] { 0 };// 1 .没次读取一个字符/*while( fread(buf , 1 , sizeof(buf), fp) 0 ){int len write( client_sock , buf , strlen(buf));memset( buf , 0 ,sizeof(buf));}*/fseek(fp, 0, SEEK_END);long size ftell(fp);fseek(fp, 0, SEEK_SET);// 为文件分配缓冲区char* buffer (char*)malloc(size);// 读取文件数据size_t bytesRead fread(buffer, 1, size, fp);if (bytesRead ! size) {printf(读取文件时发生错误\n);return ;}// 使用文件数据进行操作...printf(读取 %lu 字节的数据\n, bytesRead);int len write( client_sock , buffer , size);if( len 0){fprintf(stderr , write failed . reason :%s\n, strerror(errno));}free(buffer); } 好了 ,看到这里这个服务器已经搞定了 ,简单吧 ,核心代码就这么点. 完整版的代码 :   (方便大家复制 , 我给他写在了一个文件里面) #includestdio.h #includeunistd.h #includesys/types.h #includesys/socket.h #includestring.h #includectype.h #includearpa/inet.h #includeerrno.h #includesys/stat.h #includepthread.h#define SERVER_PORT 80 //服务器的端口号static int Debug 1;//处理http请求 void* do_http_request(void* client_sock);//返回 -1 表示读取失败 0 表示读取到一个空行 0 表示读取成功 int get_line(int sock ,char *buf ,int size );//回复客户端请求 void do_http_response1( int client_sock );void do_http_response( int client_sock , const char *path );//响应404 void not_found( int client_sock );//发送 http 头部 int header(int client_sock ,FILE *fp);//发送http body void cat(int client_sock , FILE *fp);//响应501 客户端的请求方式异常 void unimplemented(int client_sock );//响应400 客户端发送的请求格式有问题 void bad_request( int client_sock );//500 void Internal_Error(int client_sock);int main(void){int sock;//代表信箱struct sockaddr_in server_addr; //标签,保存端口号,ip地址等//1, 创建信箱sock socket( AF_INET , SOCK_STREAM , 0);//2. 清空标签,写上地址和端口号bzero( server_addr ,sizeof(server_addr));server_addr.sin_family AF_INET; //选择协议族IPV4server_addr.sin_addr.s_addr htonl( INADDR_ANY ); //监听本地所有ip地址server_addr.sin_port htons( SERVER_PORT ); //绑定我们的端口号//3. 将我们的标签贴到信箱上bind(sock ,(struct sockaddr *)server_addr,sizeof(server_addr));//4. 将我们的信箱挂到传达室,这样,保安就可以接收信件了listen(sock, 128); //这里的128表示同时可以接收的信件数量//万事俱备,只等美女来信printf(等待美女的来信\n);int done 1;//不断接受来信while( done ){struct sockaddr_in client;int client_sock,len;char client_ip[64];char buff[256];pthread_t id ; //线程的句柄 int *pclient_sockNULL;socklen_t client_addr_len;client_addr_len sizeof(client);client_sock accept(sock ,(struct sockaddr *)client, client_addr_len);//打印客户端ip地址和端口号printf(client ip: %s\t port : %d\n,inet_ntop( AF_INET, client.sin_addr.s_addr,client_ip,sizeof(client_ip)), ntohs(client.sin_port));//5 、处理http请求 读取客户端发送的数据 read()//do_http_request(client_sock);// 5.1 启动线程实现并发pclient_sock (int *)malloc( sizeof(int));*pclient_sock client_sock;pthread_create( id ,NULL , do_http_request ,(void *)pclient_sock );//6 . 响应客户端请求//close(client_sock);}close(sock);return 0; }void* do_http_request(void* pclient_sock){//读取http请求//按行读取请求头部int len 0;char buf[256]{0};char method[64]{0}; //存放请求方法char url[256]{0};//存放url(请求的资源)char version[64]{0};//协议版本char path[256]{0};//url对应的路径int client_sock *(int *)pclient_sock ; len get_line(client_sock , buf ,sizeof(buf) );if( len 0 ){//读取到请求行int i0 , j0;while(!isspace(buf[j]) i sizeof(method)-1 ){method[i] buf[j];i;j;}method[i] \0;if(Debug) printf(request method %s\n,method );//判断是否GET方法,这个服务器我们只处理get请求if( strncasecmp( method ,GET,i)0 ){if(Debug) printf(method GET\n);//继续读取请求资源while(isspace(buf[j]));//跳过空格i 0;while(!isspace(buf[j]) i sizeof(url)-1){url[i] buf[j];i;j;}//手动加上字符串结束符url[i] \0;if(Debug) printf(request url %s\n,url);//printf(131 : %c\n,buf[j]);//读取协议版本while(isspace(buf[j]));//跳过空格i 0;while(!isspace(buf[j]) i sizeof(version)-1){version[i] buf[j];i;j;}//手动加上字符串结束符version[i] \0;if(Debug) printf(request version %s\n,version);//打印请求头部do{len get_line(client_sock , buf ,sizeof(buf) );printf(request head %s\n , buf );}while(len 0);//****定位到服务器本地的 html文件 ****//****如果需要修改资源 , 那么将这里的path 路径改成你自己资源对应的路径****//处理 url 中的?{char *pos strchr( url ,?);if(pos){*pos \0;printf(real url %s\n,url);}sprintf(path ,./html_file/%s, url );if(Debug) printf(path %s\n, path );//判断请求的资源是否存在 ,存在则进行响应struct stat st; //保存文件信息的结构体if( stat( path , st) -1 ){//如果不存在则响应 404 NOT FOUNDfprintf( stderr , stat :%s failed . reason :%s\n, path , strerror(errno));not_found( client_sock );}else{ //执行http响应if(S_ISDIR(st.st_mode)){ //如果是一个目录,则补全strcat(path , /indext.html);}//响应给客户端do_http_response(client_sock , path );}}}else{ //客户端的请求方式不是 get , 响应 501 Method Not Implementedfprintf(stderr ,warning other method[%s]\n,method);do{len get_line(client_sock , buf ,sizeof(buf) );printf(request head %s\n , buf );}while(len 0);//响应客户端 501 Method Not Implementedunimplemented(client_sock);} }else { //客户端发送的请求格式有问题 相应 400 BAD REQUESTbad_request( client_sock);}close(client_sock);if( pclient_sock )free(pclient_sock);return NULL; }void do_http_response( int client_sock , const char *path ){FILE *fp NULL;fp fopen( path ,rb);if( fpNULL ){not_found(client_sock);return ;}//文件打开成功//1. 发送 http 头部 int ret header(client_sock , fp);//2. 发送http bodyif( !ret ){ cat(client_sock , fp);}//3. 清理资源fclose( fp ); }int header(int client_sock ,FILE *fp){char buf[1024] { 0 };char temp[64];int fpId -1;struct stat st;strcat(buf , HTTP/1.1 200 OK\r\n);strcat(buf , Server:wServer\r\n);strcat(buf , Content-Type:text/html\r\n);strcat(buf , Connection:Close\r\n);fpId fileno( fp );if( fstat( fpId ,st) -1 ){//响应客户端 500 Internal Server ErrorInternal_Error(client_sock); return -1;}//将响应资源的大小加上snprintf( temp , 64 ,Content-Length:%ld\r\n\r\n , st.st_size );strcat( buf , temp);if(Debug) fprintf(stdout , header :%s\n, buf );if( send( client_sock , buf , strlen(buf) , 0 ) 0 ){fprintf( stderr , send failed . reason: %s\n, strerror(errno));return -1;}return 0; }void cat(int client_sock , FILE *fp){char buf[1024] { 0 };// 1 .没次读取一个字符/*while( fread(buf , 1 , sizeof(buf), fp) 0 ){int len write( client_sock , buf , strlen(buf));memset( buf , 0 ,sizeof(buf));}*/fseek(fp, 0, SEEK_END);long size ftell(fp);fseek(fp, 0, SEEK_SET);// 为文件分配缓冲区char* buffer (char*)malloc(size);// 读取文件数据size_t bytesRead fread(buffer, 1, size, fp);if (bytesRead ! size) {printf(读取文件时发生错误\n);return ;}// 使用文件数据进行操作...printf(读取 %lu 字节的数据\n, bytesRead);int len write( client_sock , buffer , size);if( len 0){fprintf(stderr , write failed . reason :%s\n, strerror(errno));}free(buffer);// 2. 没次发//-- 无图片的版本/*fgets( buf ,sizeof(buf) , fp);while( !feof(fp)){int len write( client_sock , buf , strlen(buf));if(len 0){fprintf(stderr , write failed . reason :%s\n, strerror(errno));break;}fprintf(stdout , %s, buf);fgets( buf ,sizeof(buf) , fp);}*/ }void do_http_response1( int client_sock){//main_header - 状态行 消息报头//响应代号 200 服务器存在请求资源,可以响应给客户端const char *main_header \ HTTP/1.1 200 OK\r\n\ Server:wServer\r\n\ Content-Type:text/html\r\n\ Connection:Close\r\n;//回响正文const char* welcome_content\ html lang \zh-CN\\n\ head\n\ meta content \text/html;charsetutf-8\http-equiv\Content-Type\\n\ titleTihis is a test/title\n\ /head\n\ body\n\ dir align center height \500px\\n\ br/br/br/\n\ h2早上好/h2br/br/\n\ form action \commit\method \post\\n\ 尊姓大名:input type \text\ name\name\/\n\ br/ 芳龄几何:input type \password\ name \age\/\n\ br/br/br/input type \submit\ value\提交\/\n\ input type \reset\ value \重置\/\n\ /form\n\ /dir\n\ /body\n\ /html;if( Debug ) fprintf(stdout , .....do http_response.....\n);// 1 .发送main_headerint len write( client_sock , main_header ,strlen(main_header));if(Debug) fprintf(stdout , main_header[%d] : %s\n, len ,main_header);// 2 .生成 Conten-Lenght(要发送的文件大小) ,并发送int wc_len strlen( welcome_content );char sent_buf[64]{0};len snprintf( sent_buf , 64 ,Content-Length:%d\r\n\r\n , wc_len );len write(client_sock , sent_buf , len );if(Debug) fprintf(stdout , sent_buf[%d] : %s , len ,sent_buf );// 3. 发送html文件len write( client_sock , welcome_content , wc_len);if( Debug ) fprintf(stdout, write[%d] : %s , len , welcome_content );}int get_line(int sock , char *buf ,int size ){//每次读取一个字符int count 0 ; //当前已经读取到的字符大小char ch \0; int len 0 ;while( (count size -1) ch!\n){len read(sock , ch ,1);if( len 1 ){ //正常读取成功//处理 \r回车 \nif( ch\r) continue;else if(ch\n){//buf[count] \0; //手动添加字符串结束符break;}//处理一般的字符buf[count] ch;}else if( len 0 ){ //读取出错的情况perror(read fialed\n);count -1;break;}else { //len 0 的情况 客户端关闭了sock连接fprintf(stderr , client close\n);count -1 ;break;}}if( count 0) buf[count]\0;//if(Debug) printf(line information %s\n, buf);return count; }void not_found( client_sock ){//状态行 消息报头const char *reply \ HTTP/1.1 404 NOT FOUND\r\n\ Server:wServer\r\n\ Content-Type:text/html\r\n\ Connection:Close\r\n;//404const char *sent_buf \ !DOCTYPE html\n\ html lang\zh-CN\\n\ head\n\ meta charset\UTF-8\\n\ title404 页面未找到/title\n\ style\n\ body {\n\ text-align: center;\n\ padding: 150px;\n\ font-family: \Helvetica Neue\, Helvetica, Arial, sans-serif;\n\ }\n\ h1 {\n\ font-size: 50px;\n\ }\n\ body {\n\ font-size: 20px;\n\ }\n\ article {\n\ display: block;\n\ text-align: left;\n\ width: 650px;\n\ margin: 0 auto;\n\ }\n\ a {\n\ color: #00a2e8;\n\ text-decoration: none;\n\ }\n\ a:hover {\n\ text-decoration: underline;\n\ }\n\ /style\n\ /head\n\ body\n\ article\n\ h1404 NOT FOUND/h1\n\ div\n\ p抱歉您试图访问的页面不存在。可能是链接错误或页面已被移除。/p\n\ p您可以点击下面的链接返回a href\/\首页/a或者进行搜索。/p\n\ /div\n\ /article\n\ /body\n\ /html;int len write( client_sock , reply ,strlen(reply));if( Debug ) fprintf(stdout , reply[%d] : %s,len , reply); // 发送 Conten-Lenght int sent_buf_size strlen( sent_buf);char content_lenght[64] {0};len snprintf( content_lenght , 64 ,Content-Length:%d\r\n\r\n, sent_buf_size );len write( client_sock , content_lenght , len );if( Debug ) fprintf(stdout , content_lenght[%d]:%s, len , content_lenght);// 3. 发送响应正文len write( client_sock , sent_buf , sent_buf_size );if(Debug) fprintf(stdout ,%s, sent_buf); }void unimplemented(int client_sock ){//状态行 消息报头const char *reply \ HTTP/1.1 501 Method Not Implemented\r\n\ Server:wServer\r\n\ Content-Type:text/html\r\n\ Connection:Close\r\n;//501const char *sent_buf \ !DOCTYPE html\n\ html\n\ head\n\ meta charset\utf-8\\n\ titleHTTP 状态 501 – Method Not Implemented/title\n\ style type\text/css\\n\ h1{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ font-size: 30px;\n\ }\n\ body{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: black;\n\ background-color: white;\n\ }\n\ b{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ p{\n\ font-family:Tahoma,Arial,scans-serif;\n\ background: white;\n\ color: black;\n\ }\n\ h3{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ /style\n\ /head\n\ body\n\ h1 HTTP 状态 501 – Method Not Implemented/h1\n\ hr class\line\\n\ p b 类型/b异常报告/p\n\ p b消息/b 执行出异常/p\n\ p b描述/b 客户端请求方法有异常/p\n\ hr class\line\\n\ h3 Linux/h3\n\ /body\n\ /html;int len write( client_sock , reply ,strlen(reply));if( Debug ) fprintf(stdout , reply[%d] : %s,len , reply); // 发送 Conten-Lenght int sent_buf_size strlen( sent_buf);char content_lenght[64] {0};len snprintf( content_lenght , 64 ,Content-Length:%d\r\n\r\n, sent_buf_size );len write( client_sock , content_lenght , len );if( Debug ) fprintf(stdout , content_lenght[%d]:%s, len , content_lenght);// 3. 发送响应正文len write( client_sock , sent_buf , sent_buf_size );if(Debug) fprintf(stdout ,%s, sent_buf); }void bad_request( int client_sock ){//状态行 消息报头const char *reply \ HTTP/1.1 400 BAD REQUEST\r\n\ Server:wServer\r\n\ Content-Type:text/html\r\n\ Connection:Close\r\n;//400const char *sent_buf \ !DOCTYPE html\n\ html\n\ head\n\ meta charset\utf-8\\n\ titleHTTP 状态 400 – Method Not Implemented/title\n\ style type\text/css\\n\ h1{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ font-size: 30px;\n\ }\n\ body{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: black;\n\ background-color: white;\n\ }\n\ b{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ p{\n\ font-family:Tahoma,Arial,scans-serif;\n\ background: white;\n\ color: black;\n\ }\n\ h3{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ /style\n\ /head\n\ body\n\ h1 HTTP 状态 400 – Method Not Implemented/h1\n\ hr class\line\\n\ p b 类型/b异常报告/p\n\ p b消息/b 执行出异常/p\n\ p b描述/b 客户端请求格式异常/p\n\ hr class\line\\n\ h3 Linux/h3\n\ /body\n\ /html;int len write( client_sock , reply ,strlen(reply));if( Debug ) fprintf(stdout , reply[%d] : %s,len , reply); // 发送 Conten-Lenght int sent_buf_size strlen( sent_buf);char content_lenght[64] {0};len snprintf( content_lenght , 64 ,Content-Length:%d\r\n\r\n, sent_buf_size );len write( client_sock , content_lenght , len );if( Debug ) fprintf(stdout , content_lenght[%d]:%s, len , content_lenght);// 3. 发送响应正文len write( client_sock , sent_buf , sent_buf_size );if(Debug) fprintf(stdout ,%s, sent_buf); }void Internal_Error(int client_sock){//状态行 消息报头const char *reply \ HTTP/1.1 500 Internal Server Error\r\n\ Server:wServer\r\n\ Content-Type:text/html\r\n\ Connection:Close\r\n;//500const char *sent_buf \ !DOCTYPE html\n\ html\n\ head\n\ meta charset\utf-8\ /\n\ titleHTTP 状态 500 – 内部服务器错误/title\n\ style type\text/css\\n\ h1{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ font-size: 30px;\n\ }\n\ body{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: black;\n\ background-color: white;\n\ }\n\ b{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ p{\n\ font-family:Tahoma,Arial,scans-serif;\n\ background: white;\n\ color: black;\n\ }\n\ h3{\n\ font-family: Tahoma,Arial,scans-serif;\n\ color: white;\n\ background-color: #525d76;\n\ }\n\ /style\n\ /head\n\ body\n\ h1 HTTP 状态 500 – Internal Server Error/h1\n\ hr class\line\\n\ p b 类型/b异常报告/p\n\ p b消息/b 执行出异常/p\n\ p b描述/b 服务器收到请求, 因为自身原因没发响应。/p\n\ hr class\line\\n\ h3 Linux/h3\n\ /body\n\ /html;int len write( client_sock , reply ,strlen(reply));if( Debug ) fprintf(stdout , reply[%d] : %s,len , reply); // 发送 Conten-Lenght int sent_buf_size strlen( sent_buf);char content_lenght[64] {0};len snprintf( content_lenght , 64 ,Content-Length:%d\r\n\r\n, sent_buf_size );len write( client_sock , content_lenght , len );if( Debug ) fprintf(stdout , content_lenght[%d]:%s, len , content_lenght);// 3. 发送响应正文len write( client_sock , sent_buf , sent_buf_size );if(Debug) fprintf(stdout ,%s, sent_buf); } 总结: 代码资源 数据  链接https://pan.baidu.com/s/1Mrq7EAeVYFkxXrK68yp9vA?pwd0307  提取码0307
http://www.pierceye.com/news/102155/

相关文章:

  • 多就能自己做网站取名网站怎么做
  • 网站域名百度云网站环境建设国家城乡建设规划部网站
  • 网站设计的实例wordpress 微博备份
  • 网络推销黑河网站seo
  • 天津市建设工程管理总队网站wordpress 自媒体模版
  • 用网站做宣传的方案郴州买房网站
  • 微信网站前景wordpress 主题开发教程
  • 基于php旅游网站的毕业设计太原网站建设主页
  • 硅谷网站开发薪酬网站建设 数据可视化
  • 绍兴网站建设设计制作高端的网站开发公司
  • 网站建设包括内容南阳网站建设价格
  • 天津平台网站建设哪里好深圳网络营销推广专员
  • 手机网站建设哪家好嘉定房地产网站建设
  • 酒店网站建设需求分析wordpress 文档模板
  • 品牌微信网站定制wordpress企业cms
  • 郑州网站推广效果免费的个人网页
  • 安徽平台网站建设找哪家安阳实力网站建设首选
  • 企业网站的建设要注意哪些方面免费字体下载网站
  • 建怎样的网站挣钱快网站怎么做微博认证吗
  • 衡水做网站改版网站开发教程流程
  • 鞍山网站制作人才招聘广州网站优化步骤
  • 网站使用微信支付宁国网络推广
  • 成都网站建设六六济南网站制作公司
  • c 网站开发技术链友咨询
  • 手机网站推荐怎样做网站建设
  • 下载学校网站模板下载安装住建部官网查询
  • 模板网站新增备案两次都未通过网站也打不开电子商务网站建设实训报告文章
  • 做标签网站是干嘛的帐号售卖网站建设
  • 建设市民中心网站wordpress只显示标题插件
  • 网站备案的好处鲜花网站建设论文百度文库