{"id":142,"date":"2009-11-10T19:25:52","date_gmt":"2009-11-10T19:25:52","guid":{"rendered":"http:\/\/kumouse.aafox.com\/?p=142"},"modified":"2009-11-10T19:25:52","modified_gmt":"2009-11-10T19:25:52","slug":"%e4%b8%80%e4%b8%aa%e4%b8%8d%e5%ae%8c%e5%96%84%e7%9a%84%e5%a4%9a%e7%ba%bf%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a8%a1%e5%9e%8b","status":"publish","type":"post","link":"https:\/\/www.kumouse.com\/?p=142","title":{"rendered":"\u4e00\u4e2a\u4e0d\u5b8c\u5584\u7684\u591a\u7ebf\u7a0b\u670d\u52a1\u5668\u6a21\u578b"},"content":{"rendered":"<p>\u6839\u636e:<a href=\"http:\/\/www.kumouse.com\/article.asp?id=141\" title=\"http:\/\/www.kumouse.com\/article.asp?id=141\" target=\"_blank\">http:\/\/www.kumouse.com\/article.asp?id=141<\/a><br \/>\u4e2d\u7684\u670d\u52a1\u7aef\u6539\u5199\u800c\u6210\uff0c\u521a\u5b66\u4e0d\u4e45\uff0c\u53ea\u662f\u7ec3\u7ec3\u624b\u7684\u3002\u6709\u9ad8\u4eba\u8def\u8fc7\uff0c\u8fd8\u8bf7\u6307\u70b9<br \/>\u5b57\u7b26\u4e32\u957f\u5ea6n\u6ca1\u6709\u5f53\u53c2\u6570\u4f20\u9012\uff0c\u6240\u4ee5\u4f1a\u662f0,\u9000\u51fa\u8981\u7b2c\u4e8c\u6b21\u53d1\u6570\u636e\u624d\u884c\uff0c\u5176\u5b9e\u7528\u6d88\u606f\u5904\u7406\u51fd\u6570\uff0cCTRL\uff0bC\u5c31\u53ef\u80fd\u641e\u5b9a\u4e86<br \/>[ssj@main test]$ cat rs_easyserver.c<br \/>#include &lt;stdio.h&gt;<br \/>#include &lt;stdlib.h&gt;<br \/>#include &lt;unistd.h&gt;<br \/>#include &lt;ctype.h&gt;<br \/>#include &lt;sys\/socket.h&gt;<br \/>#include &lt;arpa\/inet.h&gt;<br \/>#include &lt;string.h&gt;<br \/>#include &lt;pthread.h&gt;<br \/>#define MAX 200<br \/>#define BB 16<br \/>int k=0;<br \/>void my_turn(char *p)<br \/>{sleep(10);<br \/>if (p == NULL)return;<br \/>while( *p != &#39;\u0000&#39;)<br \/>{<br \/>if( *p &gt;= (char)0x61 &#038;&#038; *p &lt;= (char)0x7a)<br \/>*p=(char)((int)*p-(int)0x20);<br \/>p++;<br \/>}<br \/>}<\/p>\n<p>typedef struct arg_struct ARG;<br \/>struct arg_struct{<br \/>int cfd;<br \/>};<br \/>void *f1(void *arg)<br \/>{ <br \/>char buf[MAX];<br \/>char addr_p[BB];<br \/>int n,cfd;<br \/>ARG *p=(ARG *)arg;<br \/>cfd=p-&gt;cfd;<br \/>    n=recv(cfd,buf,MAX,0);<br \/>    if (n==-1)<br \/>    {<br \/>    perror(&quot;Fail to recv&quot;);<br \/>    exit(1);<br \/>    }<br \/>    else if(n==0)<br \/>    {<br \/>    printf(&quot;the connect closedn&quot;);<br \/>    close(cfd);<br \/>    exit(1);<br \/>    }<br \/>if (strcmp(buf,&quot;close&quot;)==0){k=1;}<br \/>  printf(&quot;type:%sn&quot;,buf);<br \/>  my_turn(buf);<br \/>  printf(&quot;turn type:%sn=================================n&quot;,buf);<br \/>  n=send(cfd,buf,n,0);<br \/>    if(n==-1){<br \/>    perror(&quot;Fail to send&quot;);<br \/>    exit(1);<br \/>    }<br \/>    if(close(cfd)==-1)<br \/>    {<br \/>    perror(&quot;Fail to close&quot;);<br \/>    exit(1);<br \/>    }<\/p>\n<p>}<\/p>\n<p>int main(void)<br \/>{<br \/>struct sockaddr_in sin,cin;<br \/>struct sockaddr *tmp;<br \/>int lfd,cfd;<br \/>socklen_t len;<br \/>char buf[MAX];<br \/>char addr_p[BB];<br \/> int n,err,port = 65533;<br \/>pthread_t tid;<br \/>ARG arg;<br \/>bzero(&#038;sin,sizeof(sin));<br \/>sin.sin_family=AF_INET;<br \/>sin.sin_addr.s_addr=INADDR_ANY;<br \/>sin.sin_port=htons(port);<\/p>\n<p>if((lfd=socket(AF_INET,SOCK_STREAM,0))==-1)<br \/>{<br \/>perror(&quot;Fail to create socket&quot;);<br \/>exit(1);<br \/>}<\/p>\n<p>if(bind(lfd,(struct sockaddr *)&#038;sin,sizeof(sin))==-1)<br \/>{<br \/>perror(&quot;Fail to bind&quot;);<br \/>exit(1);<br \/>}<br \/>if(listen(lfd,10)==-1)<br \/>{<br \/>perror(&quot;Fail to listen&quot;);<br \/>exit(1);<br \/>}<br \/>printf(&quot;running&#8230;&#8230;&#8230;.n&quot;);<\/p>\n<p>while(1)<br \/>{<br \/>if((cfd=accept(lfd,(struct sockaddr *)&#038;cin,&#038;len))==-1)<br \/>{<br \/>perror(&quot;Fail to accept&quot;);<br \/>exit(1);<br \/>}else{<br \/>    inet_ntop(AF_INET,&#038;cin.sin_addr,addr_p,sizeof(addr_p));<br \/>\/\/    printf(&quot;client IP is:%s:%d size:%dn&quot;,addr_p,ntohs(cin.sin_port),n);<br \/>arg.cfd=cfd;<br \/>err=pthread_create(&#038;tid,NULL,f1,(void *)&#038;arg);<br \/>if (err!=0){printf(&quot;%sn&quot;,strerror(err));exit(1);}<br \/>}<br \/>    printf(&quot;client IP is:%s:%d Pthread:%d size:%dn&quot;,addr_p,ntohs(cin.sin_port),tid,n);<br \/>if (k==1)<br \/>{close(cfd);close(lfd);exit(0);}<br \/>}<\/p>\n<p>if(close(cfd)==-1)<br \/>{<br \/>perror(&quot;Fail to close&quot;);<br \/>exit(1);<br \/>}<\/p>\n<p>if(close(lfd)==-1)<br \/>{<br \/>perror(&quot;fail close&quot;);<br \/>exit(1);<br \/>}<br \/>return 0;<br \/>}<\/p>\n<p>\u6ce8\uff1a\u7f16\u8bd1\u65f6\u52a0-lpthread\u53c2\u6570\uff0cpthread_create\u4e0d\u5728\u9ed8\u8ba4\u5e93\u91cc<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6839\u636e:http:\/\/www.kumouse.com\/article.asp?id=141\u4e2d\u7684\u670d\u52a1\u7aef\u6539\u5199\u800c\u6210\uff0c\u521a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-142","post","type-post","status-publish","format-standard","hentry","category-linux-c"],"_links":{"self":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=142"}],"version-history":[{"count":0,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/142\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}