⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个多线程web服务器实例(c,linux,详细的web服务器原理) - 马牛不是人 - csdnblog.htm

📁 一个多线程web服务器实例(C,Linux,详细的web服务器原理)
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        href="http://blog.csdn.net/manio/category/245307.aspx">Programing</A><A 
        href="http://blog.csdn.net/manio/category/245307.aspx/rss">(RSS)</A>
        <LI class=listitem><A 
        href="http://blog.csdn.net/manio/category/167996.aspx">Web</A><A 
        href="http://blog.csdn.net/manio/category/167996.aspx/rss">(RSS)</A></LI></UL>
      <H3 class=listtitle>收藏</H3>
      <UL class=list></UL>
      <H3 class=listtitle>相册</H3><!--category title-->
      <UL class=list>
        <LI class=listitem><A 
        href="http://blog.csdn.net/manio/Gallery/174493.aspx">Just For 
        Looking</A></LI></UL>
      <H3 class=listtitle>Linux</H3>
      <UL class=list>
        <LI class=listitem><A href="http://www.chinaunix.net/" 
        target=_blank>ChinaUnix</A>
        <LI class=listitem><A 
        href="http://www-128.ibm.com/developerworks/cn/linux/" target=_blank>IBM 
        Linux</A>
        <LI class=listitem><A href="http://www.kernelnewbies.org/" 
        target=_blank>KernelNewBies</A>
        <LI class=listitem><A href="http://www.die.net/doc/linux/man/" 
        target=_blank>Linux man page</A>
        <LI class=listitem><A href="http://www.linuxforum.net/" 
        target=_blank>LinuxForum</A>
        <LI class=listitem><A href="http://blog.csdn.net/group/lmr/" 
        target=_blank>LinuxMR圈子</A>
        <LI class=listitem><A href="http://www.linuxsir.org/" 
        target=_blank>LinuxSir</A>
        <LI class=listitem><A href="http://net.pku.edu.cn/~yhf/linux_c/" 
        target=_blank>Linux常用C函数(中文版)</A>
        <LI class=listitem><A href="http://www.chinalinuxpub.com/" 
        target=_self>Linux技术中坚站</A>
        <LI class=listitem><A href="http://www.imhaha.com/" 
        target=_blank>WebQQ(IMhaha)</A>
        <LI class=listitem><A href="http://www.linuxfans.org/nuke/index.php" 
        target=_blank>中国linux公社</A>
        <LI class=listitem><A href="http://linux.ccidnet.com/" 
        target=_blank>赛迪网Linux</A></LI></UL>
      <H3 class=listtitle>Other</H3>
      <UL class=list>
        <LI class=listitem><A href="http://www.sooweb.net/" 
        target=_blank>几维下载</A>
        <LI class=listitem><A href="http://www.365key.com/manio/" 
        target=_blank>我的365key</A>
        <LI class=listitem><A href="http://www.52z.com/" 
        target=_blank>飞翔下载</A></LI></UL>
      <H3 class=listtitle>Sign of Success</H3>
      <UL class=list>
        <LI class=listitem><A href="http://donaldtrump.trumpuniversity.com/" 
        target=_blank>Donald Trump</A>
        <LI class=listitem><A href="http://www.kaifulee.com/" 
        target=_blank>Kaifu Lee</A>
        <LI class=listitem><A href="http://www.forbes.com/billionaires/" 
        target=_blank>World's Richest People</A></LI></UL>
      <H3 class=listtitle>友·情</H3>
      <UL class=list>
        <LI class=listitem><A href="http://www.blogcn.com/user19/7bu/index.html" 
        target=_blank>7步的blog</A>
        <LI class=listitem><A href="http://mrpirnce.blogdriver.com/" 
        target=_blank>Mr.Prince3.0的blog</A>
        <LI class=listitem><A href="http://www.paule.net.cn/" 
        target=_blank>http://www.paule.net.cn/</A>
        <LI class=listitem><A href="http://www.eviloctal.com/weblog" 
        target=_blank>冰血封情的断弦寒香阁</A>
        <LI class=listitem><A href="http://spaces.msn.com/prajnalin/" 
        target=_blank>纸老虎-Prajna的MsnSpace</A></LI></UL>
      <H3 class=listtitle>存档</H3>
      <UL class=list>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/08.aspx">2007年08月(1)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/07.aspx">2007年07月(2)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/06.aspx">2007年06月(2)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/04.aspx">2007年04月(2)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/03.aspx">2007年03月(1)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/02.aspx">2007年02月(2)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2007/01.aspx">2007年01月(1)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/11.aspx">2006年11月(8)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/10.aspx">2006年10月(23)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/09.aspx">2006年09月(5)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/08.aspx">2006年08月(15)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/07.aspx">2006年07月(5)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/04.aspx">2006年04月(1)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/03.aspx">2006年03月(14)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/02.aspx">2006年02月(22)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2006/01.aspx">2006年01月(45)</A>
        <LI><A 
        href="http://blog.csdn.net/manio/archive/2005/12.aspx">2005年12月(15)</A></LI></UL><SPAN 
      id=Anthem_RecentComments1_ltlComments__><SPAN 
      id=RecentComments1_ltlComments>
      <H3 class=listtitle>最近评论</H3>
      <UL class=list>
        <LI class=listitem>crazyman33:<A title=点击查看《回复:如何在一个月内完成一个USB设备》 
        href="http://blog.csdn.net/manio/archive/2007/01/18/1487007.aspx#650488">你的1、2点全是错误的!别误人子弟</A>
        <LI class=listitem>彬:<A title=点击查看《回复:什么叫精通C/C++(CSDN回帖语录)》 
        href="http://blog.csdn.net/manio/archive/2006/10/10/1328506.aspx#557141">写的好 
        我很想学习这 但现在连入门的c语言都不熟悉<BR>请问我能继续学下去吗?????</A>
        <LI class=listitem>shootyou:<A 
        title=点击查看《回复:谨以此文献给才毕业2--5年的朋友(其实应该给还在大学中的朋友)》 
        href="http://blog.csdn.net/manio/archive/2006/10/18/1339502.aspx#522523">好东西~ 
        看了有丝感动~</A>
        <LI class=listitem>boygod:<A 
        title=点击查看《回复:谨以此文献给才毕业2--5年的朋友(其实应该给还在大学中的朋友)》 
        href="http://blog.csdn.net/manio/archive/2006/10/18/1339502.aspx#505090">有种说不出的感觉,就总是形容不出来</A>
        <LI class=listitem>zippo:<A title=点击查看《回复:聆听朱清时教授讲创新》 
        href="http://blog.csdn.net/manio/archive/2006/07/07/887150.aspx#482497">在我们收到订单后3个工作日内,我们会电话通知您取货时间,办公室地址:湖南省长沙市芙蓉中路119号标志房产大厦12B08,电话:0731-2891329 
        0731-2891129</A></LI></UL></SPAN></SPAN></DIV></FONT></FONT></TD>
    <TD class=MainCell>
      <DIV id=main>
      <DIV class=Tag>
      <SCRIPT language=javascript 
      src="一个多线程web服务器实例(C,Linux,详细的web服务器原理) - 马牛不是人 - CSDNBlog.files/urltag.aspx"></SCRIPT>

      <DIV style="CLEAR: both"></DIV></DIV><SPAN class=PreAndNext 
      id=viewpost.ascx_PreviousAndNextEntriesUp>
      <DIV align=center><A 
      href="http://blog.csdn.net/manio/archive/2006/10/17/1338512.aspx">上一篇:&nbsp;what 
      kind of linuxer is wanted by companys?</A>&nbsp;|&nbsp;<A 
      href="http://blog.csdn.net/manio/archive/2006/10/13/1333470.aspx">下一篇:&nbsp;入门多线程服务器程序实例</A></DIV></SPAN><BR>
      <SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>

      <DIV class=post>
      <DIV class=postTitle><A 
      href="http://blog.csdn.net/manio/archive/2006/10/14/1334558.aspx"><IMG 
      height=13 
      src="一个多线程web服务器实例(C,Linux,详细的web服务器原理) - 马牛不是人 - CSDNBlog.files/authorship.gif" 
      width=15 border=0>&nbsp;一个多线程web服务器实例(C,Linux,详细的web服务器原理)</A> </DIV>
      <DIV class=postText>
      <P>系统:fedora core 
      5<BR>编译器:g++<BR>实现功能:通过http协议,用浏览器查看服务器上的html,htm,jpg,jpeg,gif,png,css文件&nbsp;,或者说查看带有jpg,jpeg,gif等文件的网页,即是web~<BR>把代码复制下来到linux里,照着后面的方法编译、运行,就可以看到一个简单的多线程服务器的效果了。</P>
      <P>原理:<BR>在浏览器中输入一个网址,回车之后,浏览器会向相应主机的相应端口发送一段报文,如果是http协议的(如平常看到的网页的传输协议),就会发送HTTP请求报文。下面是一个报文的例子:</P>
      <DIV 
      style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
      <DIV><SPAN style="COLOR: #008000">GET /index.html HTTP/1.1<BR>Host: 
      127.0.0.1:8848<BR>User-Agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; 
      rv:1.8.0.1) Gecko/20060313 Fedora/1.5.0.1-9 Firefox/1.5.0.1 
      pango-text<BR>Accept: 
      text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<BR>Accept-Language: 
      zh-cn,zh;q=0.5<BR>Accept-Encoding: gzip,deflate<BR>Accept-Charset: 
      gb2312,utf-8;q=0.7,*;q=0.7<BR>Keep-Alive: 300<BR>Connection: 
      keep-alive</SPAN></DIV></DIV>
      <P>我们在服务器端把收到的数据打印出来,可以看到浏览器发过来的就是这个东西。当然,也可以用ethereal等抓包工具来抓获这些报文。关于报文里写的是什么意思,网上有很多资料的,GOOGLE一下就有了。我们只看第一行。</P>
      <P>GET表示是要从服务器获取文件,/index.html是文件的路径,这个路径是相对于服务器端程序所在文件夹的路径。如我的服务器端程序放在/home/mio/program/webserver1707/里面,那这个index.html在服务器上的绝对路径就是/home/mio/program/webserver1707/index.html。如果报文里是GET 
      /admin/login.html 
      HTTP/1.1的话,那么login.html文件在服务器端的路径是/home/mio/program/webserver1707/admin/login.html.HTTP/1.1表示的是HTTP协议的版本是1.1.</P>
      <P>服务器端程序运行后,一直监听8848端品(0-1023的端口由IANA统一分配和控制的,不要用,最好选大一些的端口号。我原来用了个1234,用不了,还是选大一点好,可以用5460之类的啊~:) 
      ),当监听到客户端发来的请求后,就与客户端建立链接,接收客户端发过来的请求报文。我们如果把这些报文打出来,就可以看到就是与上面请求报文类似的东西了。</P>
      <P>下面我们要根据所接受的到的请求报文(<SPAN style="COLOR: #008000">GET /index.html 
      HTTP/1.1</SPAN>)来决定放给客户端(即浏览器)什么东西。这里我们看到浏览器要的是index.html这样一个html文本,我们就在相应路径(/home/mio/program/webserver1707/index.html)找到这个文件,不过不要急着发给客户端,我们要先告诉客户端,发过去的是一个html文件,让浏览器做好相应的准备。怎么让浏览器知道呢?我们还是用报文,这个报文叫响应报文。报文由状态行、首部行、实体主体三部分组成。状态行只有一行,它和首部行、首部行的每行之间是没有空行的,但是首部行与实体主体之间有一个空行,表明从这个空行开始,就是你浏览器要的数据了。下面是一个用ethereal抓到的响应报文:&nbsp;</P>
      <DIV 
      style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
      <P>HTTP/1.1 200 OK<BR>Cache-Control: private<BR>Content-Type: text/html; 
      charset=UTF-8<BR>Content-Encoding: gzip<BR>Server: 
      GWS/2.1<BR>Content-Length: 1851<BR>Date: Sat, 14 Oct 2006 11:33:39 GMT</P>
      <P>&lt;html&gt;&lt;head&gt;&lt;meta http-equiv="content-type" 
      content="text/html; 
      charset=UTF-8"&gt;&lt;title&gt;Google&lt;/title&gt;&lt;style&gt;&lt;!--<BR>body,td,a,p,.h{font-family:arial,sans-serif}<BR>.h{font-size:20px}<BR>.q{color:#00c}<BR>--&gt;&lt;/style&gt;<BR>&lt;script&gt;<BR>&lt;!--<BR>function 
      sf(){document.f.q.focus();}<BR>function 
      clk(url,oi,cad,ct,cd,sg){if(document.images){var e = 
      window.encodeURIComponent ? encodeURIComponent : escape;var u="";var 
      oi_param="";var cad_param="";if (url) 
      u="&amp;url="+e(url.replace(/#.*/,"")).replace(/\+/g,"%2B");if (oi) 
      oi_param="&amp;oi="+e(oi);if (cad) cad_param="&amp;cad="+e(cad);new 
      Image().src="/url?sa=T"+oi_param+cad_param+"&amp;ct="+e(ct)+"&amp;cd="+e(cd)+u+"&amp;ei=E8swRYIOkpKwAvzZ8JkB"+sg;}return 
      true;}<BR>// --&gt;<BR>&lt;/script&gt;<BR>&lt;/head&gt;&lt;body 
      bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 
      onLoad=sf() topmargin=3 marginheight=3&gt;&lt;center&gt;&lt;div 
      align=right nowrap style="padding-bottom:4px" width=100%&gt;&lt;font 
      size=-1&gt;&lt;b&gt;manioster@gmail.com&lt;/b&gt;&amp;nbsp;|&amp;nbsp;&lt;a 
      href="/url?sa=p&amp;pref=ig&amp;pval=3&amp;q=http://www.google.com/ig%3Fhl%3Dzh-CN&amp;sig=__1eXNMn0jGllmJ57x74DzjVvy6Vk=" 
      onmousedown="return 
      clk('/url?sa=p&amp;pref=ig&amp;pval=3&amp;q=http://www.google.com/ig%3Fhl%3Dzh-CN&amp;sig=__1eXNMn0jGllmJ57x74DzjVvy6Vk=','promos','hppphou:zh-cn_all','pro','1','&amp;sig2=zclmOmtQiZPPuTCMWUJMZA')"&gt;个性化主页&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a 
      href="<A 
      href="https://www.google.com/accounts/ManageAccount">https://www.google.com/accounts/ManageAccount</A>"&gt;我的帐户&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -