简单理解Socket及TCP/IP、Http、Socket的区别

来源:互联网 发布:nginx搭建wss环境 编辑:程序博客网 时间:2024/05/18 02:52
<div id="article_details" class="details">
    <div class="article_title">   
         <span class="ico ico_type_Repost"></span>


    <h1>
        <span class="link_title"><a href="/jenminzhang/article/details/47017741">
        简单理解Socket及TCP/IP、Http、Socket的区别        
           
        </a>
        </span>


         
    </h1>
</div>


   


        <div class="article_manage clearfix">
        <div class="article_r">
            <span class="link_postdate">2015-07-23 10:06</span>
            <span class="link_view" title="阅读次数">20971人阅读</span>
            <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
            <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('%e7%ae%80%e5%8d%95%e7%90%86%e8%a7%a3Socket%e5%8f%8aTCP%2fIP%e3%80%81Http%e3%80%81Socket%e7%9a%84%e5%8c%ba%e5%88%ab','47017741');return false;" title="收藏" target="_blank">收藏</a></span>
             <span class="link_report"> <a href="#report" onclick="javascript:report(47017741,2);return false;" title="举报">举报</a></span>


        </div>
    </div>    <style type="text/css">        
            .embody{
                padding:10px 10px 10px;
                margin:0 -20px;
                border-bottom:solid 1px #ededed;                
            }
            .embody_b{
                margin:0 ;
                padding:10px 0;
            }
            .embody .embody_t,.embody .embody_c{
                display: inline-block;
                margin-right:10px;
            }
            .embody_t{
                font-size: 12px;
                color:#999;
            }
            .embody_c{
                font-size: 12px;
            }
            .embody_c img,.embody_c em{
                display: inline-block;
                vertical-align: middle;               
            }
             .embody_c img{               
                width:30px;
                height:30px;
            }
            .embody_c em{
                margin: 0 20px 0 10px;
                color:#333;
                font-style: normal;
            }
    </style>
    <script type="text/javascript">
        $(function () {
            try
            {
                var lib = eval("("+$("#lib").attr("value")+")");
                var html = "";
                if (lib.err == 0) {
                    $.each(lib.data, function (i) {
                        var obj = lib.data[i];
                        //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                        html += ' <a href="' + obj.url + '" target="_blank">';
                        html += ' <img src="' + obj.logo + '">';
                        html += ' <em><b>' + obj.name + '</b></em>';
                        html += ' </a>';
                    });
                    if (html != "") {
                        setTimeout(function () {
                            $("#lib").html(html);                      
                            $("#embody").show();
                        }, 100);
                    }
                }      
            } catch (err)
            { }
            
        });
    </script>
      <div class="category clearfix">
        <div class="category_l">
           <img src="http://static.blog.csdn.net/images/category_icon.jpg">
            <span>分类:</span>
        </div>
        <div class="category_r">
                    <label onclick="GetCategoryArticles('1259963','JenMinZhang','top','47017741');">
                        <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">JAVA学习与开发<em>(12)</em></span>
                      <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                      <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                        <div class="subItem">
                            <div class="subItem_t"><a href="http://blog.csdn.net/JenMinZhang/article/category/1259963" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                            <ul class="subItem_l" id="top_1259963">                            
                            </ul>
                        </div>
                    </label>                    
        </div>
    </div>


  


  
  
     




<div style="clear:both"></div><div style="border:solid 1px #ccc; background:#eee; float:left; min-width:200px;padding:4px 10px;"><p style="text-align:right;margin:0;"><span style="float:left;">目录<a href="#" title="系统根据文章中H1到H6标签自动生成文章目录">(?)</a></span><a href="#" onclick="javascript:return openct(this);" title="展开">[+]</a></p><ol style="display:none;margin-left:14px;padding-left:14px;line-height:160%;"><li><a href="#t0">题外话</a></li><li><a href="#t1">TCPIP</a></li><li><a href="#t2">socket</a></li><li><a href="#t3">socket通信流程</a></li><li><a href="#t4">三次握手</a></li><li><a href="#t5">参考</a></li></ol></div><div style="clear:both"></div><div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post">


<div id="cnblogs_post_body">
<h3><a name="t0" target="_blank"></a>题外话</h3>
<p>前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人;但主要是因为这段时间一直在看<a href="http://lib.csdn.net/base/html5" class="replace_word" title="HTML5知识库" target="_blank" style="color:#df3434; font-weight:bold;">HTML5</a>的东西,看到web socket时觉得很有意思,动手写几个demo,但web socket需要特定的服务器支持,由于标准制定工作还没完成,所以没有多少主流的服务器支持,自己在网上下载了几个实现,包括<a href="http://lib.csdn.net/base/php" class="replace_word" title="PHP知识库" target="_blank" style="color:#df3434; font-weight:bold;">PHP</a>的、C#的、甚至<a href="http://lib.csdn.net/base/nodejs" class="replace_word" title="Node.js知识库" target="_blank" style="color:#df3434; font-weight:bold;">Node.js</a>的,但一个是协议变化比较大,很多代码已经过时了,再就是有一些支持最新的标准,但是我想稍微改造一下,看人家源代码的时候云里雾里,看看别人的代码行数也不多,决定自己实现一个。</p>
<p>悲剧由此开始,虽然哥们儿国内非知名工科大学毕业,但好歹也是科班CS出身,但大学得过且过,什么TCP/IP协议,什么socket了都没概念。为了做出一个简单的支持广播的websocket server,在网上找了很多相关代码,左抄一句,右抄一句,弄了一个星期竟然还是漏洞百出,调试不起来,只好从头来过了,先补一些基本知识,然后再一步步根据原理实现,今天终于实现了绝大部分功能,由此真的感受到了,搞计算机必须得有理论指导实践,否则只能像个没头苍蝇到处乱撞。</p>
<h3><a name="t1" target="_blank"></a>TCP/IP</h3>
<p>要想理解socket首先得熟悉一下TCP/IP协议族,<span>&nbsp;</span><span lang="EN-US">TCP/IP</span><span>(</span><span lang="EN-US">Transmission Control Protocol/Internet Protocol</span><span>)即传输控制协议</span><span lang="EN-US">/</span><span>网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,</span></p>
<p><span>从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指<span>因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中</span></span></p>
<p>应用层:<span>TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等</span></p>
<p>传输层:<span>TCP,UDP</span></p>
<p>网络层:<span>IP,ICMP,OSPF,EIGRP,IGMP</span></p>
<p>数据链路层:<span>SLIP,CSLIP,PPP,MTU</span></p>
<p>每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的</p>
<p><img src="http://images.cnitblog.com/blog/349217/201312/05230830-04807bb739954461a8bfc7513707f253.jpg" alt="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="http://images.cnitblog.com/blog/349217/201312/05230857-f49d5855f1e14a23a186737e0bec8a0f.gif" alt=""></p>
<p>估计有兴趣打开此文的同学都对此有一定了解了,加上我也是一知半解,所以就不详细解释,有兴趣同学可以上网上搜一下资料</p>
<p><a target="_blank" title="TCP/IP协议" href="http://zh.wikipedia.org/wiki/TCP/IP">维基百科</a><a target="_blank" title="维基百科" href="http://zh.wikipedia.org/wiki/TCP/IP">
<br>
</a></p>
<p><a target="_blank" title="TCP/IP协议" href="http://baike.baidu.com/link?url=KJleEWJUBxe3XaxEaTU1lcQrg9qYN7FYzuPhoWVyoPFNk79NIURxAO6HSWC1MfrCU1Dh7QRsNDWOaZ-4bg5HRa">百度百科</a></p>
<p>在TCP/IP协议中两个因特网主机通过两个路由器和对应的层连接。各主机上的应用通过一些数据通道相互执行读取操作</p>
<p><span><img src="http://images.cnitblog.com/blog/349217/201312/05221430-6bd4ce2a2cf7434ca9216c0a5b6a0985.png" alt="" height="493" width="417"><span>
<br>
</span></span></p>
<h3><a name="t2" target="_blank"></a>socket</h3>
<p>我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。</p>
<p>能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。</p>
<p><img src="http://images.cnitblog.com/blog/349217/201312/05225723-2ffa89aad91f46099afa530ef8660b20.jpg" alt=""></p>
<p>socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。</p>
<h3><a name="t3" target="_blank"></a>socket通信流程</h3>
<p>socket是"打开—读/写—关闭"模式的实现,以使用TCP协议通讯的socket为例,其交互流程大概是这样子的</p>
<p><img src="http://images.cnitblog.com/blog/349217/201312/05232335-fb19fc7527e944d4845ef40831da4ec2.png" alt=""></p>
<p><span style="color:#888888"><span style="color:#008000">服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket</span></span></p>
<p><span style="color:#888888"><span style="color:#008000">服务器为socket绑定ip地址和端口号</span></span></p>
<p><span style="color:#888888"><span style="color:#008000">服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开</span></span></p>
<p>客户端创建socket</p>
<p>客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket</p>
<p><span style="color:#888888"><span style="color:#008000">服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入<span style="color:#ff0000"><strong>阻塞</strong></span>状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求</span></span></p>
<p>客户端连接成功,向服务器发送连接状态信息</p>
<p><span style="color:#888888"><span style="color:#008000">服务器accept方法返回,连接成功</span></span></p>
<p>客户端向socket写入信息</p>
<p><span style="color:#888888"><span style="color:#008000">服务器读取信息</span></span></p>
<p>客户端关闭</p>
<p><span style="color:#888888"><span style="color:#008000">服务器端关闭</span></span></p>
<h3><a name="t4" target="_blank"></a>三次握手</h3>
<p>在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接</p>
<p><img src="http://images.cnitblog.com/blog/349217/201312/05234233-eed6ddcba93c42be8847e98d6da62802.jpg" alt="" height="340" width="566"></p>
<p>第一次握手:客户端尝试连接服务器,向服务器发送syn包(<span>同步序列编号</span><em><strong>Synchronize Sequence Numbers</strong></em>),syn=j,客户端进入SYN_SEND状态等待服务器确认</p>
<p>第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端<span>发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV</span><span>状态</span></p>
<p>第三次握手:<span>第三次握手:客户端</span><span>收到服务</span><span>器的SYN+ACK包,向服务器</span><span>发送确认包ACK(ack</span><span>=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED</span><span>状态,完成三次握手</span></p>
<p>定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手</p>
<p><img src="http://images.cnitblog.com/blog/349217/201312/05234946-b80841921eae4d2ab983f26ed9023768.png" alt=""></p>
<p>&nbsp;<strong>socket编程API</strong></p>
<p>前面提到socket是"打开—读/写—关闭"模式的实现,简单了解一下socket提供了哪些API供应用程序使用,还是以TCP协议为例,看看Unix下的socket API,其它语言都很类似(<a href="http://lib.csdn.net/base/php" class="replace_word" title="PHP知识库" target="_blank" style="color:#df3434; font-weight:bold;">php</a>甚至名字都几乎一样),这里我就简单解释一下方法作用和参数,具体使用有兴趣同学可以看看博客参考中的链接或者上网搜索</p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> socket(<span style="color:#0000ff">int</span> domain, <span style="color:#0000ff">int</span> type, <span style="color:#0000ff">int</span> protocol);</pre>
</div>
<p>根据指定的地址族、数据类型和协议来分配一个socket的描述字及其所用的资源。</p>
<p>domain:协议族,常用的有<span>AF_INET</span><span>、</span><span>AF_INET6</span><span>、</span><span>AF_LOCAL</span><span>、</span><span>AF_ROUTE</span>其中<span>AF_INET代表使用ipv4地址</span></p>
<p><span>type:<span>socket类型,常用的socket类型有,</span><span>SOCK_STREAM</span><span>、</span><span>SOCK_DGRAM</span><span>、</span><span>SOCK_RAW</span><span>、</span><span>SOCK_PACKET</span><span>、</span><span>SOCK_SEQPACKET</span><span>等</span></span></p>
<p>protocol:<span>协议。常用的协议有,</span><span>IPPROTO_TCP</span><span>、</span><span>IPPTOTO_UDP</span><span>、</span><span>IPPROTO_SCTP</span><span>、</span><span>IPPROTO_TIPC</span><span>等</span></p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> bind(<span style="color:#0000ff">int</span> sockfd, <span style="color:#0000ff">const</span> <span style="color:#0000ff">struct</span> sockaddr *addr, socklen_t addrlen);</pre>
</div>
<p><span>把一个地址族中的特定地址赋给socket</span></p>
<p>sockfd:<span>socket描述字,也就是socket引用</span></p>
<p>addr:<span>要绑定给sockfd的协议地址</span></p>
<p>addrlen:<span>地址的长度</span></p>
<p><em>通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。</em></p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> listen(<span style="color:#0000ff">int</span> sockfd, <span style="color:#0000ff">int</span> backlog);</pre>
</div>
<p>监听socket</p>
<p><span>sockfd:要监听的socket描述字</span></p>
<p><span>backlog:相应socket可以排队的最大连接个数</span>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> connect(<span style="color:#0000ff">int</span> sockfd, <span style="color:#0000ff">const</span> <span style="color:#0000ff">struct</span> sockaddr *addr, socklen_t addrlen);</pre>
</div>
<p>连接某个socket</p>
<p><span>sockfd:客户端的socket描述字</span></p>
<p><span>addr:服务器的socket地址</span></p>
<p><span>addrlen:socket地址的长度</span></p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> accept(<span style="color:#0000ff">int</span> sockfd, <span style="color:#0000ff">struct</span> sockaddr *addr, socklen_t *addrlen);</pre>
</div>
<p>&nbsp;<span>TCP服务器监听到客户端请求之后,调用</span><span><span>accept</span><span>()</span></span><span>函数取接收请求</span></p>
<p>sockfd:服务器的socket描述字</p>
<p>addr:客户端的socket地址</p>
<p>addrlen:socket地址的长度</p>
<div class="cnblogs_code">
<pre>ssize_t read(<span style="color:#0000ff">int</span> fd, <span style="color:#0000ff">void</span> *buf, size_t count);</pre>
</div>
<p>读取socket内容</p>
<p>fd:socket描述字</p>
<p>buf:缓冲区</p>
<p>count:缓冲区长度</p>
<div class="cnblogs_code">
<pre>ssize_t write(<span style="color:#0000ff">int</span> fd, <span style="color:#0000ff">const</span> <span style="color:#0000ff">void</span> *buf, size_t count);</pre>
</div>
<p>向socket写入内容,其实就是发送内容</p>
<p>fd:socket描述字</p>
<p>buf:缓冲区</p>
<p>count:缓冲区长度</p>
<div class="cnblogs_code">
<pre><span style="color:#0000ff">int</span> close(<span style="color:#0000ff">int</span> fd);</pre>
</div>
<p><span>socket标记为以关闭</span> ,<span>使相应socket描述字的引用计数-1,当引用计数为0的时候,触发TCP客户端向服务器发送终止连接请求。</span></p>
<h3><a name="t5" target="_blank"></a>参考</h3>
<p><a target="_blank" href="http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html">Linux Socket编程(不限Linux)</a></p>
<p><a target="_blank" href="http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx">揭开Socket编程的面纱
<br>
</a></p>
<p>PS. 有同学看完后发现没有demo示例,参考中的示例已经很不错了,我就不班门弄斧了,而且我用C#实现了一个websocket server,接下来的博客中会有介绍。另外由于刚刚实际接触socket,文中谬误较多,还望大家批评指正,文章内容主要参考上面两个博文,图片全部来源于网络,在百度图片搜索得来,无法注明第一源地址,如有版权问题请站内信联系,第一时间处理。</p>
</div>
<p><br>
</p>
<p>原文地址为;http://www.cnblogs.com/dolphinX/p/3460545.html&nbsp;&nbsp;&nbsp; <br>
</p>
   
</div>








<!-- Baidu Button BEGIN -->








<div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="float: right;" data-mod="popu_172" data-bd-bind="1504498936445">
<a href="#" class="bds_more" data-cmd="more" style="background-position:0 0 !important; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png) !important" target="_blank"></a>
<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间" style="background-position:0 -52px !important" target="_blank"></a>
<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博" style="background-position:0 -104px !important" target="_blank"></a>
<a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博" style="background-position:0 -260px !important" target="_blank"></a>
<a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网" style="background-position:0 -208px !important" target="_blank"></a>
<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信" style="background-position:0 -1612px !important" target="_blank"></a>
</div>
<script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script>
<!-- Baidu Button END -->


   


<!--172.16.140.11-->


<!-- Baidu Button BEGIN -->
<script type="text/javascript" id="bdshare_js" data="type=tools&amp;uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=417917"></script>


<script type="text/javascript">
    document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
</script>
<!-- Baidu Button END -->






 




        <div id="digg" articleid="47017741">
            <dl id="btnDigg" class="digg digg_disable" onclick="btndigga();">
               
                 <dt>顶</dt>
                <dd>7</dd>
            </dl>
           
              
            <dl id="btnBury" class="digg digg_disable" onclick="btnburya();">
              
                  <dt>踩</dt>
                <dd>1</dd>               
            </dl>
            
        </div>
     <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
    <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</a></div>
    <script type="text/javascript">
        function btndigga() {
            $(".tracking-ad[data-mod='popu_222'] a").click();
        }
        function btnburya() {
            $(".tracking-ad[data-mod='popu_223'] a").click();
        }
            </script>


   <ul class="article_next_prev">
                <li class="prev_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian']);location.href='http://blog.csdn.net/JenMinZhang/article/details/38929629';">上一篇</span><a href="http://blog.csdn.net/JenMinZhang/article/details/38929629" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian'])">固态硬盘(SSD) 和机 械硬盘(HDD) 优缺点比较</a></li>
                <li class="next_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian']);location.href='http://blog.csdn.net/JenMinZhang/article/details/50837570';">下一篇</span><a href="http://blog.csdn.net/JenMinZhang/article/details/50837570" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian'])">MySQL数据库字符集引发存储过程【Illegal mix of collations】问题总结</a></li>
    </ul>


    <div style="clear:both; height:10px;"></div>




            <div class="similar_article">
                    <h4></h4>
                    <div class="similar_c" style="margin:20px 0px 0px 0px">
                        <div class="similar_c_t">
                          &nbsp;&nbsp;相关文章推荐
                        </div>
                   
                        <div class="similar_wrap tracking-ad" data-mod="popu_36" style="max-height:250px">                       
                            <ul class="similar_list fl">    
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/E_ROAD_BY_U/article/details/53944535" title="以太网接口TCP/IP协议介绍" strategy="BlogCommendFromBaidu_0" target="_blank">以太网接口TCP/IP协议介绍</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/huiyiCourse/series_detail/60?utm_source=blog7" title="【直播】打通Linux脉络 进程、线程和调度--宋宝华" strategy="undefined" target="_blank">【直播】打通Linux脉络 进程、线程和调度--宋宝华</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/vichie2008/article/details/38080097" title="基于TCP/IP的网络编程接口:Socket" strategy="BlogCommendFromBaidu_1" target="_blank">基于TCP/IP的网络编程接口:Socket</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/huiyiCourse/series_detail/62?utm_source=blog7" title="【直播】系统集成工程师必过冲刺--任铄" strategy="undefined" target="_blank">【直播】系统集成工程师必过冲刺--任铄</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/zeng622peng/article/details/5546384" title="socket与http的区别" strategy="BlogCommendFromBaidu_2" target="_blank">socket与http的区别</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/huiyiCourse/series_detail/61?utm_source=blog7" title="【直播】机器学习30天系统掌握--唐宇迪" strategy="undefined" target="_blank">【直播】机器学习30天系统掌握--唐宇迪</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u013503014/article/details/41207257" title="TCP/IP各层网络协议的通俗理解" strategy="BlogCommendFromBaidu_3" target="_blank">TCP/IP各层网络协议的通俗理解</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/458?utm_source=blog7" title="【课程】Oracle从入门到精通--文心" strategy="undefined" target="_blank">【课程】Oracle从入门到精通--文心</a>
                                   </li>
                            </ul>
                              <ul class="similar_list fr">      
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/skyboy11yk/article/details/24304461" title="TCP/IP、Http、Socket的区别" strategy="BlogCommendFromBaidu_4" target="_blank">TCP/IP、Http、Socket的区别</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/545?utm_source=blog7" title="【套餐】Android入门实战教程--巫文杰" strategy="undefined" target="_blank">【套餐】Android入门实战教程--巫文杰</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/andrew57/article/details/9788903" title="直接用socket实现HTTP协议(下载专用)" strategy="BlogCommendFromBaidu_5" target="_blank">直接用socket实现HTTP协议(下载专用)</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/474?utm_source=blog7" title="【课程】 C++语言基础 --贺利坚" strategy="undefined" target="_blank">【课程】 C++语言基础 --贺利坚</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u012359618/article/details/53353505" title="简单理解Socket及TCP/IP、Http、Socket的区别" strategy="BlogCommendFromBaidu_6" target="_blank">简单理解Socket及TCP/IP、Http、Socket的区别</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/lxk7280/article/details/49717601" title="C# TCP/IP 连接实现数据收发 Demo (Visual Studio)" strategy="BlogCommendFromBaidu_7" target="_blank">C# TCP/IP 连接实现数据收发 Demo (Visual Studio)</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/lulongzhou_llz/article/details/45245873" title="SOCKET与TCP/IP与HTTP的关系" strategy="BlogCommendFromBaidu_8" target="_blank">SOCKET与TCP/IP与HTTP的关系</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/y505772146/article/details/62236631" title="HTTP、TCP/IP、SOCKET的区别" strategy="BlogCommendFromCsdn_9" target="_blank">HTTP、TCP/IP、SOCKET的区别</a>
                                   </li>
                            </ul>
                        </div>
                    </div>
                </div>   
      
</div>
阅读全文
0 0