<.h>
<span style="color: #0000ff">#define SERV_PORT 9003
<span style="color: #0000ff">char str_join(<span style="color: #0000ff">char str1,<span style="color: #0000ff">char *<span style="color: #000000">str2);
<span style="color: #0000ff">char html_response(<span style="color: #0000ff">char res,<span style="color: #0000ff">char *<span style="color: #000000">buf);
<span style="color: #0000ff">int main(<span style="color: #0000ff">void<span style="color: #000000">) {
<span style="color: #0000ff">int<span style="color: #000000"> lfd,cfd;
<span style="color: #0000ff">struct<span style="color: #000000"> sockaddr_in serv_addr,clin_addr;
socklen_t clin_len;
<span style="color: #0000ff">char buf[<span style="color: #800080">1024],web_result[<span style="color: #800080">1024<span style="color: #000000">];
<span style="color: #0000ff">int<span style="color: #000000"> len;
FILE *<span style="color: #000000">cin;
</span><span style="color: #0000ff">if</span> ((lfd = socket(AF_INET,SOCK_STREAM,<span style="color: #800080">0</span>)) == -<span style="color: #800080">1</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">create socket failed</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
memset(</span>&serv_addr,<span style="color: #800080">0</span>,<span style="color: #0000ff">sizeof</span><span style="color: #000000">(serv_addr));
serv_addr.sin_family </span>=<span style="color: #000000"> AF_INET;
serv_addr.sin_addr.s_addr </span>=<span style="color: #000000"> htonl(INADDR_ANY);
serv_addr.sin_port </span>=<span style="color: #000000"> htons(SERV_PORT);
</span><span style="color: #0000ff">if</span> (bind(lfd,(<span style="color: #0000ff">struct</span> sockaddr *) &serv_addr,<span style="color: #0000ff">sizeof</span>(serv_addr)) == -<span style="color: #800080">1</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">bind error</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
</span><span style="color: #0000ff">if</span> (listen(lfd,<span style="color: #800080">128</span>) == -<span style="color: #800080">1</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">listen error</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
signal(SIGCLD,SIG_IGN);
</span><span style="color: #0000ff">while</span> (<span style="color: #800080">1</span><span style="color: #000000">) {
clin_len </span>= <span style="color: #0000ff">sizeof</span><span style="color: #000000">(clin_addr);
</span><span style="color: #0000ff">if</span> ((cfd = accept(lfd,(<span style="color: #0000ff">struct</span> sockaddr *) &clin_addr,&clin_len)) == -<span style="color: #800080">1</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">接收错误n</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">continue</span><span style="color: #000000">;
}
cin </span>= fdopen(cfd,<span style="color: #800000">"</span><span style="color: #800000">r</span><span style="color: #800000">"</span><span style="color: #000000">);
setbuf(cin,(</span><span style="color: #0000ff">char</span> *) <span style="color: #800080">0</span><span style="color: #000000">);
fgets(buf,</span><span style="color: #800080">1024</span>,cin); <span style="color: #008000">//</span><span style="color: #008000">读取第一行</span>
printf(<span style="color: #800000">"</span><span style="color: #800000">n%s</span><span style="color: #800000">"</span><span style="color: #000000">,buf);
</span><span style="color: #008000">//</span><span style="color: #008000">============================ cgi 环境变量设置演示 ============================
</span><span style="color: #008000">//</span><span style="color: #008000"> 例如 "GET /cgi-bin/user?id=1 HTTP/1.1";</span>
<span style="color: #0000ff">char</span> *delim = <span style="color: #800000">"</span> <span style="color: #800000">"</span><span style="color: #000000">;
</span><span style="color: #0000ff">char</span> *<span style="color: #000000">p;
</span><span style="color: #0000ff">char</span> *method,*filename,*<span style="color: #000000">query_string;
</span><span style="color: #0000ff">char</span> *query_string_pre = <span style="color: #800000">"</span><span style="color: #800000">QUERY_STRING=</span><span style="color: #800000">"</span><span style="color: #000000">;
method </span>= strtok(buf,delim); <span style="color: #008000">//</span><span style="color: #008000"> GET</span>
p = strtok(NULL,delim); <span style="color: #008000">//</span><span style="color: #008000"> /user?id=1 </span>
filename = strtok(p,<span style="color: #800000">"</span><span style="color: #800000">?</span><span style="color: #800000">"</span>); <span style="color: #008000">//</span><span style="color: #008000"> /user</span>
<span style="color: #0000ff">if</span> (strcmp(filename,<span style="color: #800000">"</span><span style="color: #800000">/favicon.ico</span><span style="color: #800000">"</span>) == <span style="color: #800080">0</span><span style="color: #000000">) {
</span><span style="color: #0000ff">continue</span><span style="color: #000000">;
}
query_string </span>= strtok(NULL,<span style="color: #800000">"</span><span style="color: #800000">?</span><span style="color: #800000">"</span>); <span style="color: #008000">//</span><span style="color: #008000"> id=1</span>
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!