{"id":32,"date":"2013-03-28T14:39:25","date_gmt":"2013-03-28T14:39:25","guid":{"rendered":""},"modified":"2013-03-28T14:39:25","modified_gmt":"2013-03-28T14:39:25","slug":"","status":"publish","type":"post","link":"http:\/\/weizn.net\/?p=32","title":{"rendered":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef"},"content":{"rendered":"<p>#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\n#include &lt;winsock2.h&gt;<br \/>\n#pragma comment(lib,&#8221;ws2_32.lib&#8221;)<\/p>\n<p>#define HTTP_PORT 80<br \/>\n#define HTTP_BUF_SIZE 1024<br \/>\n#define NAME_SIZE 1024<br \/>\n#define PATH_SIZE 1024<\/p>\n<p>struct doc_type<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; char *suffix;\/\/\u6587\u4ef6\u540e\u7f00<br \/>\n&nbsp;&nbsp;&nbsp; char *type;&nbsp; \/\/\u6587\u4ef6\u7c7b\u578b<br \/>\n};<\/p>\n<p>struct doc_type file_type[]=<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;html&#8221;,&#8221;text\/html&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;htm&#8221;,&#8221;text\/html&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;txt&#8221;,&#8221;text\/plain&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;jpg&#8221;,&#8221;image\/jpeg&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;gif&#8221;,&#8221;image\/gif&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;bmp&#8221;,&#8221;application\/x-bmp&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;ico&#8221;,&#8221;application\/x-ico&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {&#8220;swf&#8221;,&#8221;application\/x-shockwave-flash&#8221;},<br \/>\n&nbsp;&nbsp;&nbsp; {NULL,NULL},<br \/>\n};<\/p>\n<p>\/\/\u54cd\u5e94\u7684\u9996\u90e8\u5185\u5bb9<br \/>\nchar *http_head_temp=&#8221;HTTP\/1.1 200 OK\\r\\nServer:Wayne&#8217;s Server &lt;Version 1.0.0&gt;\\r\\n&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Accept-Ranges:bytes\\r\\nContent-Length:%d\\r\\nConnection:close\\r\\n&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Content-Type:%s\\r\\n\\r\\n&#8221;;<\/p>\n<p>\/\/\u901a\u8fc7\u6587\u4ef6\u540e\u7f00\u67e5\u627e\u5bf9\u5e94\u7684\u6587\u4ef6\u7c7b\u578bContent-Type<br \/>\nchar *http_get_type_by_suffix(char *suffix)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; struct doc_type *ty;<br \/>\n&nbsp;&nbsp;&nbsp; for(ty=file_type; (*ty).suffix; ty++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strcmp((*ty).suffix,suffix)==0)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (*ty).type;<br \/>\n&nbsp;&nbsp;&nbsp; return NULL;<br \/>\n}<\/p>\n<p>\/\/\u901a\u8fc7URL\u83b7\u53d6\u8bbf\u95ee\u6587\u4ef6\u540d\u548c\u540e\u7f00<br \/>\nint http_analyse_url(char *buf,int buflen,char *file_path,char *file_name,char *suffix)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; int length=0,i=0,j,k=0;<br \/>\n&nbsp;&nbsp;&nbsp; char *begin,*end,*bias,*p,*start;<br \/>\n&nbsp;&nbsp;&nbsp; for(j=0;j&lt;HTTP_BUF_SIZE;j++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buf[j]==&#8217; &#8216;) k++;<br \/>\n&nbsp;&nbsp;&nbsp; if(k&lt;2) return -1;<br \/>\n&nbsp;&nbsp;&nbsp; begin=strchr(buf,&#8217; &#8216;);<br \/>\n&nbsp;&nbsp;&nbsp; begin++;<br \/>\n&nbsp;&nbsp;&nbsp; for(p=begin; *p==&#8217;\/&#8217;; p++) begin=p;<br \/>\n&nbsp;&nbsp;&nbsp; start=begin;&nbsp;&nbsp;&nbsp;&nbsp; \/\/start\u5f00\u59cb\u7684\u4f4d\u7f6e\u4e0d\u5305\u62ec\u201c\/\u201d<br \/>\n&nbsp;&nbsp;&nbsp; end=strchr(begin,&#8217; &#8216;);<\/p>\n<p>&nbsp;&nbsp;&nbsp; for(p=begin; p!=end; p++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*p==&#8217;\/&#8217;) begin=p;<br \/>\n&nbsp;&nbsp;&nbsp; begin++;&nbsp;&nbsp; \/\/\u5c06\u6307\u9488\u5b9a\u4f4d\u5230\u6700\u540e\u4e00\u4e2a\u2018\/\u2019\u7684\u540e\u9762\u4e00\u4f4d<br \/>\n&nbsp;&nbsp;&nbsp; for(p=begin; p!=end; p++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*p==&#8217;.&#8217;) i=1;&nbsp; \/\/\u5224\u65ad\u6700\u540e\u540e\u7f00\u662f\u5426\u6709\u201c.\u201d\uff0c\u6709\u8868\u793a\u8bbf\u95ee\u7684\u662f\u6587\u4ef6\uff0c\u65e0\u8868\u793a\u8bbf\u95ee\u7684\u662f\u8def\u5f84<\/p>\n<p>&nbsp;&nbsp;&nbsp; if(i==0)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=end-start;&nbsp;&nbsp; \/\/\u83b7\u53d6\u8bbf\u95ee\u8def\u5f84\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(file_path,start,length);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; else<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=begin-start;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(file_path,start,length);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; for(p=file_path; *p!=NULL; p++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*p==&#8217;\/&#8217;) *p=&#8217;\\\\&#8217;;&nbsp;&nbsp;&nbsp; \/\/\u5c06\u8def\u5f84\u4e2d\u7684&#8217;\/&#8217;\u6539\u4e3a&#8217;\\&#8217;<br \/>\n&nbsp;&nbsp;&nbsp; p&#8211;;<br \/>\n&nbsp;&nbsp;&nbsp; if(*p!=&#8217;\\\\&#8217;)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u5728\u8def\u5f84\u7684\u6700\u540e\u6dfb\u52a0&#8217;\\&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p++;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *p=&#8217;\\\\&#8217;;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; if(i==1)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=end-begin;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u83b7\u53d6\u6587\u4ef6\u540d\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(file_name,NULL,NAME_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(file_name,begin,length);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(p=begin; p!=end; p++)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*p==&#8217;.&#8217;) begin=p;&nbsp;&nbsp;&nbsp; \/\/\u5b9a\u4f4d\u5230\u6700\u540e\u4e00\u4e2a&#8217;.&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin++;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length=end-begin; \/\/\u83b7\u53d6\u6269\u5c55\u540d\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(suffix,NULL,NAME_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(suffix,begin,length);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;&nbsp;&nbsp; \/\/\u5b9a\u4e49\u4e86\u8bbf\u95ee\u76ee\u6807<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; return 0;&nbsp;&nbsp;&nbsp; \/\/\u6ca1\u6709\u5b9a\u4e49\u8bbf\u95ee\u76ee\u6807<br \/>\n}<br \/>\nvoid error(SOCKET soc)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; int file_len=46,hdr_len;<br \/>\n&nbsp;&nbsp;&nbsp; char http_header[HTTP_BUF_SIZE],*Content_type=&#8221;text\/html&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp; char error[HTTP_BUF_SIZE]=&#8221;&lt;P&gt;&lt;FONT color=#ff0000 size=7&gt;ERROR&lt;\/FONT&gt;&lt;\/P&gt;&#8221;;&nbsp;&nbsp; \/\/46<br \/>\n&nbsp;&nbsp;&nbsp; memset(http_header,NULL,HTTP_BUF_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp; hdr_len=sprintf(http_header,http_head_temp,file_len,Content_type); \/\/\u683c\u5f0f\u5316\u9996\u90e8\u5185\u5bb9<br \/>\n&nbsp;&nbsp;&nbsp; send(soc,http_header,hdr_len,0);<br \/>\n&nbsp;&nbsp;&nbsp; send(soc,error,file_len,0);<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bbf\u95ee\u51fa\u9519\\n========================================================================\\n&#8221;);<br \/>\n}<\/p>\n<p>int http_send_response(SOCKET soc,char *buf,int buf_len)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; FILE *file=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; char http_header[HTTP_BUF_SIZE],file_name[NAME_SIZE]=&#8221;index.html&#8221;,file_name2[NAME_SIZE]=&#8221;index.htm&#8221;,file_path[PATH_SIZE],file_path_temp[PATH_SIZE],suffix[NAME_SIZE]=&#8221;html&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp; char HTTP_Send_Buff[HTTP_BUF_SIZE],*Content_type=NULL,read_buf[HTTP_BUF_SIZE],*p,*q,target_file[NAME_SIZE];<br \/>\n&nbsp;&nbsp;&nbsp; int file_len=0,hdr_len=0,send_len=0,read_len=0;<br \/>\n&nbsp;&nbsp;&nbsp; int results,i=0;<br \/>\n&nbsp;&nbsp;&nbsp; memset(file_path,NULL,PATH_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp; if((results=http_analyse_url(buf,HTTP_BUF_SIZE,file_path,file_name,suffix))==-1)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; memset(target_file,NULL,NAME_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp; for(p=file_path; *p!=NULL; p++)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(*p==&#8217;\\\\&#8217;)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p++;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(file_path_temp,NULL,PATH_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(q=p; *q==&#8217;\\\\&#8217;; q++);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(file_path_temp,q,strlen(q));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(p,file_path_temp,strlen(file_path_temp));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strlen(file_path_temp)==0)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *p=NULL;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; strcat(target_file,&amp;file_path[1]);<br \/>\n&nbsp;&nbsp;&nbsp; strcat(target_file,file_name);<br \/>\n&nbsp;&nbsp;&nbsp; if(results==1)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((file=fopen(target_file,&#8221;rb&#8221;))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bbf\u95ee\\&#8221;%s\\&#8221;\u5931\u8d25,\u4e0d\u5b58\u5728\u6b64\u6587\u4ef6\\n&#8221;,target_file);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u83b7\u53d6\u6587\u4ef6\u5927\u5c0f<br \/>\n&nbsp;&nbsp;&nbsp; else<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((file=fopen(target_file,&#8221;rb&#8221;))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(target_file,NULL,NAME_SIZE);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(target_file,&amp;file_path[1]);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(target_file,file_name2);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((file=fopen(target_file,&#8221;rb&#8221;))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u65e0\u9996\u9875\u6587\u4ef6\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bbf\u95ee\u6587\u4ef6:%s\\n&#8221;,target_file);<br \/>\n&nbsp;&nbsp;&nbsp; fseek(file,0,SEEK_END);<br \/>\n&nbsp;&nbsp;&nbsp; file_len=ftell(file);<br \/>\n&nbsp;&nbsp;&nbsp; fseek(file,0,SEEK_SET);<br \/>\n&nbsp;&nbsp;&nbsp; if((Content_type=http_get_type_by_suffix(suffix))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&#8220;\u65e0\u6b64\u6587\u4ef6\u7c7b\u578b&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error(soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; hdr_len=sprintf(http_header,http_head_temp,file_len,Content_type); \/\/\u683c\u5f0f\u5316\u9996\u90e8\u5185\u5bb9<br \/>\n&nbsp;&nbsp;&nbsp; if((send_len=send(soc,http_header,hdr_len,0))==SOCKET_ERROR)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; do<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read_len=fread(read_buf,sizeof(char),HTTP_BUF_SIZE,file);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(read_len&gt;0)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_len=send(soc,read_buf,read_len,0);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file_len-=read_len;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; while((read_len&gt;0)&amp;&amp;(file_len&gt;0));<br \/>\n&nbsp;&nbsp;&nbsp; fclose(file);<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;========================================================================\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; return 1;<br \/>\n}<\/p>\n<p>int main(int argc,char argv[])<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; WSADATA wsa;<br \/>\n&nbsp;&nbsp;&nbsp; SOCKET srv_soc,acpt_soc;<br \/>\n&nbsp;&nbsp;&nbsp; struct sockaddr_in serv_addr;<br \/>\n&nbsp;&nbsp;&nbsp; struct sockaddr_in from_addr;<br \/>\n&nbsp;&nbsp;&nbsp; char recv_buf[HTTP_BUF_SIZE];<br \/>\n&nbsp;&nbsp;&nbsp; memset(recv_buf,NULL,sizeof(recv_buf));<br \/>\n&nbsp;&nbsp;&nbsp; int port=HTTP_PORT,from_len=sizeof(from_addr),recv_len;<br \/>\n&nbsp;&nbsp;&nbsp; \/*if(argc==2)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port=atoi(argv[1]);<br \/>\n&nbsp;&nbsp;&nbsp; }*\/<br \/>\n&nbsp;&nbsp;&nbsp; WSAStartup(MAKEWORD(2,0),&amp;wsa);<br \/>\n&nbsp;&nbsp;&nbsp; if((srv_soc=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) exit(0);<br \/>\n&nbsp;&nbsp;&nbsp; serv_addr.sin_family=AF_INET;<br \/>\n&nbsp;&nbsp;&nbsp; serv_addr.sin_port=htons(port);<br \/>\n&nbsp;&nbsp;&nbsp; serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);<br \/>\n&nbsp;&nbsp;&nbsp; if(bind(srv_soc,(struct sockaddr *)&amp;serv_addr,sizeof(serv_addr))==SOCKET_ERROR)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&#8220;\u7ed1\u5b9a\u5730\u5740\u5931\u8d25&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system(&#8220;pause&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; if(listen(srv_soc,SOMAXCONN)!=0)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&#8220;\u5957\u63a5\u53e3\u8f6c\u88ab\u52a8\u6a21\u5f0f\u5931\u8d25&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system(&#8220;pause&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;The Service Started&#8230;\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; while(1)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((acpt_soc=accept(srv_soc,(struct sockaddr *)&amp;from_addr,&amp;from_len))==INVALID_SOCKET)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&#8220;\u63a5\u53d7\u5ba2\u6237\u7aef\u8fde\u63a5\u670d\u52a1\u542f\u52a8\u5931\u8d25&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket(acpt_soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u5ba2\u6237\u7aef%s\u63a5\u5165\\n&#8221;,inet_ntoa(from_addr.sin_addr));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(recv(acpt_soc,recv_buf,HTTP_BUF_SIZE,0)==SOCKET_ERROR)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&#8220;\u63a5\u6536\u6570\u636e\u5931\u8d25&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket(acpt_soc);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recv_buf[HTTP_BUF_SIZE-1]=NULL;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http_send_response(acpt_soc,recv_buf,recv_len);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket(acpt_soc);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\n#include &lt;winsock2.h&gt;<br \/>\n#pragma comment(lib,&#8221;ws2_32.lib&#8221;)<\/p>\n<p>#define HTTP_PORT 80<br \/>\n#define HTTP_BUF_SIZE 1024<br \/>\n#define NAME_SIZE 1024<br \/>\n#define P&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[324],"tags":[],"class_list":["post-32","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef - Wayne&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/weizn.net\/?p=32\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef - Wayne&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;winsock2.h&gt; #pragma comment(lib,&quot;ws2_32.lib&quot;)#define HTTP_PORT 80 #define HTTP_BUF_SIZE 1024 #define NAME_SIZE 1024 #define P...\" \/>\n<meta property=\"og:url\" content=\"http:\/\/weizn.net\/?p=32\" \/>\n<meta property=\"og:site_name\" content=\"Wayne&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-03-28T14:39:25+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"zinan\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/weizn.net\/#website\",\"url\":\"http:\/\/weizn.net\/\",\"name\":\"Wayne&#039;s Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/weizn.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/weizn.net\/?p=32#webpage\",\"url\":\"http:\/\/weizn.net\/?p=32\",\"name\":\"C\\u8bed\\u8a00\\u5b9e\\u73b0\\u7b80\\u5355\\u7684Web\\u670d\\u52a1\\u7aef - Wayne&#039;s Blog\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/#website\"},\"datePublished\":\"2013-03-28T14:39:25+00:00\",\"dateModified\":\"2013-03-28T14:39:25+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/weizn.net\/?p=32#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/weizn.net\/?p=32\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/weizn.net\/?p=32#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\\u9996\\u9875\",\"item\":\"http:\/\/weizn.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\\u8bed\\u8a00\\u5b9e\\u73b0\\u7b80\\u5355\\u7684Web\\u670d\\u52a1\\u7aef\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/weizn.net\/?p=32#article\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/?p=32#webpage\"},\"author\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"headline\":\"C\\u8bed\\u8a00\\u5b9e\\u73b0\\u7b80\\u5355\\u7684Web\\u670d\\u52a1\\u7aef\",\"datePublished\":\"2013-03-28T14:39:25+00:00\",\"dateModified\":\"2013-03-28T14:39:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/weizn.net\/?p=32#webpage\"},\"wordCount\":2086,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"articleSection\":[\"C\/C++\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/weizn.net\/?p=32#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\",\"name\":\"zinan\",\"logo\":{\"@id\":\"http:\/\/weizn.net\/#personlogo\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef - Wayne&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/weizn.net\/?p=32","og_locale":"zh_CN","og_type":"article","og_title":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef - Wayne&#039;s Blog","og_description":"#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;winsock2.h&gt; #pragma comment(lib,\"ws2_32.lib\")#define HTTP_PORT 80 #define HTTP_BUF_SIZE 1024 #define NAME_SIZE 1024 #define P...","og_url":"http:\/\/weizn.net\/?p=32","og_site_name":"Wayne&#039;s Blog","article_published_time":"2013-03-28T14:39:25+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"zinan","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/weizn.net\/#website","url":"http:\/\/weizn.net\/","name":"Wayne&#039;s Blog","description":"","publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/weizn.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"WebPage","@id":"http:\/\/weizn.net\/?p=32#webpage","url":"http:\/\/weizn.net\/?p=32","name":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef - Wayne&#039;s Blog","isPartOf":{"@id":"http:\/\/weizn.net\/#website"},"datePublished":"2013-03-28T14:39:25+00:00","dateModified":"2013-03-28T14:39:25+00:00","breadcrumb":{"@id":"http:\/\/weizn.net\/?p=32#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["http:\/\/weizn.net\/?p=32"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/weizn.net\/?p=32#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"http:\/\/weizn.net\/"},{"@type":"ListItem","position":2,"name":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef"}]},{"@type":"Article","@id":"http:\/\/weizn.net\/?p=32#article","isPartOf":{"@id":"http:\/\/weizn.net\/?p=32#webpage"},"author":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"headline":"C\u8bed\u8a00\u5b9e\u73b0\u7b80\u5355\u7684Web\u670d\u52a1\u7aef","datePublished":"2013-03-28T14:39:25+00:00","dateModified":"2013-03-28T14:39:25+00:00","mainEntityOfPage":{"@id":"http:\/\/weizn.net\/?p=32#webpage"},"wordCount":2086,"commentCount":0,"publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"articleSection":["C\/C++"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/weizn.net\/?p=32#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264","name":"zinan","logo":{"@id":"http:\/\/weizn.net\/#personlogo"}}]}},"_links":{"self":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/32","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=32"}],"version-history":[{"count":0,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/32\/revisions"}],"wp:attachment":[{"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=32"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=32"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=32"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}