Linux c socket编程

当前位置:  编程语言>c/c++

Linux c socket编程:简单的客户端(client)和服务端(server)实现

 
    <!-- Baidu Button BEGIN -->
    <div id="bdshare" class="bdshare_t bds_tools get-codes-bdshare">
    <span class="bds_more">分享到:</span>
    <a class="bds_qzone" title="分享到QQ空间" href="#"></a>
    <a class="bds_tsina" title="分享到新浪微博" href="#"></a>
    <a class="bds_tqq" title="分享到腾讯微博" href="#"></a>
    <a class="bds_renren" title="分享到人人网" href="#"></a>
    <a class="bds_t163" title="分享到网易微博" href="#"></a>
    <a class="shareCount" href="#" title="累计分享2次">2</a>
    </div>
    <script type="text/javascript" id="bdshare_js" data="type=tools&amp;uid=6774646" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=434020"></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 style="float:left">
    &nbsp;&nbsp;&nbsp;&nbsp;发布时间:2013-8-13&nbsp;&nbsp;       </div>
   </div>
    <br>
   <div>
   <!------------------- sogou ad  start --------------------->
  <!------------------- sogou ad  end --------------------->

 <!------------------- google ad  start --------------------->
    <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- 文章标题下部728-90 -->
    <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-0562613540409681" data-ad-slot="8017720203" data-adsbygoogle-status="done"><ins id="aswift_1_expand" style="display:inline-table;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:728px;background-color:transparent;"><ins id="aswift_1_anchor" style="display:block;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:728px;background-color:transparent;"><iframe width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_1" name="aswift_1" style="left:0;position:absolute;top:0;border:0px;width:728px;height:90px;"></iframe></ins></ins></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
<!------------------- google ad  end --------------------->
   </div>
   <br>
   <!----------导读----------------->
   <div align="left" style="border:0px solid blue;font-family:微软雅黑;font-size:10px;background-color:#eff4fa;line-height:23px;width:95%;height:50px;">
    &nbsp;&nbsp;&nbsp;&nbsp;<b>本文导语:</b>&nbsp;1 基本socket函数  Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个整型的socket...       </div>
   <br>

   <div style="font-family:宋体 Arial Narrow HELVETICA;font-size:14px;color:black;width:95%;word-wrap:break-word; overflow:hidden;" align="left">
   <p><strong><span style="font-family:微软雅黑, 'microsoft yahei';">1 基本<a class="inlink" href="/tag/socket" target="_blank">socket</a><a class="inlink" href="/tag/函数" target="_blank">函数</a></span></strong><br></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;<a class="inlink" href="/tag/linux" target="_blank">Linux</a><a class="inlink" href="/tag/系统" target="_blank">系统</a>是通过提供套接字(socket)来进行<a class="inlink" href="/tag/网络编程" target="_blank">网络编程</a>的。<a class="inlink" href="/tag/网络" target="_blank">网络</a>的socket<a class="inlink" href="/tag/数据传输" target="_blank">数据传输</a>是一种特殊的I/O,socket也是一种<a class="inlink" href="/tag/文件描述符" target="_blank">文件描述符</a>。socket也有一个类似于打</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">开<a class="inlink" href="/tag/文件" target="_blank">文件</a>的函数:socket(),调用socket(),该函数返回一个整型的socket的<a class="inlink" href="/tag/描述符" target="_blank">描述符</a>,随后的<a class="inlink" href="/tag/连接" target="_blank">连接</a>建立、数据传输等操作也都是通过该socket实现。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">1)socket函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数<a class="inlink" href="/tag/原型" target="_blank">原型</a>:</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp;</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">socket(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">domain, </code><code class="cpp color1 bold">int</code> <code class="cpp plain">type, </code><code class="cpp color1 bold">int</code> <code class="cpp plain">protocol);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';"></span><span style="font-family:微软雅黑, 'microsoft yahei';">功能<a class="inlink" href="/tag/说明" target="_blank">说明</a>:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; 调用成功,返回socket文件描述符;失败,返回-1,并设置<a class="inlink" href="/tag/errno" target="_blank">errno</a></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"><a class="inlink" href="/tag/参数" target="_blank">参数</a>说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/domain" target="_blank">domain</a>指明所使用的<a class="inlink" href="/tag/协议" target="_blank">协议</a>族,通常为PF_<a class="inlink" href="/tag/inet" target="_blank">INET</a>,表示<a class="inlink" href="/tag/tcp" target="_blank">TCP</a>/<a class="inlink" href="/tag/ip" target="_blank">IP</a>协议;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/type" target="_blank">type</a>参数指定socket的类型,基本上有三种:<a class="inlink" href="/tag/数据流" target="_blank">数据流</a>套接字、数据报套接字、原始套接字</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/protocol" target="_blank">protocol</a>通常<a class="inlink" href="/tag/赋值" target="_blank">赋值</a>"0"。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  两个网络<a class="inlink" href="/tag/程序" target="_blank">程序</a>之间的一个<a class="inlink" href="/tag/网络连接" target="_blank">网络连接</a>包括五种<a class="inlink" href="/tag/信息" target="_blank">信息</a>:通信协议、本地协议<a class="inlink" href="/tag/地址" target="_blank">地址</a>、本地<a class="inlink" href="/tag/主机" target="_blank">主机</a><a class="inlink" href="/tag/端口" target="_blank">端口</a>、远端主机地址和远端协议端口。socket<a class="inlink" href="/tag/数据结构" target="_blank">数据结构</a>中包含这五</span><span style="font-family:微软雅黑, 'microsoft yahei';">种信息。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">2)<a class="inlink" href="/tag/bind" target="_blank">bind</a>函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型: &nbsp;</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp;</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">bind(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">sock_fd,</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr_in *my_addr, </code><code class="cpp color1 bold">int</code> <code class="cpp plain">addrlen);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">功能说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; 将套接字和指定的端口相连。成功返回0,否则,返回-1,并置errno.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">参数说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp; &nbsp; sock_fd是调用socket函数<a class="inlink" href="/tag/返回值" target="_blank">返回值</a>,</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  my_addr是一个<a class="inlink" href="/tag/指向" target="_blank">指向</a>包含有本机<a class="inlink" href="/tag/ip地址" target="_blank">IP地址</a>及端口号等信息的sockaddr类型的<a class="inlink" href="/tag/指针" target="_blank">指针</a>;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/struct" target="_blank">struct</a> sockaddr_<a class="inlink" href="/tag/in" target="_blank">in</a>结构类型是用来保存socket信息的:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  struct sockaddr_in {</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/short" target="_blank">short</a> <a class="inlink" href="/tag/int" target="_blank">int</a> <a class="inlink" href="/tag/sin" target="_blank">sin</a>_family;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  <a class="inlink" href="/tag/unsigned" target="_blank">unsigned</a> short int sin_<a class="inlink" href="/tag/port" target="_blank">port</a>;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  struct in_addr sin_addr;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  unsigned <a class="inlink" href="/tag/char" target="_blank">char</a> sin_<a class="inlink" href="/tag/zero" target="_blank">zero</a>[8];</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">  };</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;addrlen为sockaddr的<a class="inlink" href="/tag/长度" target="_blank">长度</a>。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">3)<a class="inlink" href="/tag/connect" target="_blank">connect</a>函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型: &nbsp;</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; </span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">connect(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">sock_fd, </code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr *serv_addr,</code><code class="cpp color1 bold">int</code> <code class="cpp plain">addrlen);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">功能说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; <a class="inlink" href="/tag/客户端" target="_blank">客户端</a>发送<a class="inlink" href="/tag/服务" target="_blank">服务</a><a class="inlink" href="/tag/请求" target="_blank">请求</a>。成功返回0,否则返回-1,并置errno。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">参数说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; sock_fd 是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是结构sockaddr_in的长度。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">4)<a class="inlink" href="/tag/listen" target="_blank">listen</a>函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型:</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp;</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">listen(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">sock_fd, </code><code class="cpp color1 bold">int</code> <code class="cpp plain">backlog);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">功能说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; 等待指定的端口的出现客户端连接。调用成功返回0,否则,返回-1,并置errno.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">参数说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; sock_fd 是socket()函数返回值;</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; <a class="inlink" href="/tag/backlog" target="_blank">backlog</a>指定在请求<a class="inlink" href="/tag/队列" target="_blank">队列</a>中允许的最大请求数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">5)accecpt函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型: &nbsp;</span><span style="font-family:微软雅黑, 'microsoft yahei';"> </span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">accept(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">sock_fd, </code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockadd_in* addr, </code><code class="cpp color1 bold">int</code> <code class="cpp plain">addrlen);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">功能说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; 用于接受客户端的服务请求,成功返回新的套接字描述符,失败返回-1,并置errno。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">参数说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; sock_fd是被监听的socket描述符,</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; addr通常是一个指向sockaddr_in<a class="inlink" href="/tag/变量" target="_blank">变量</a>的指针,</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; addrlen是结构sockaddr_in的长度。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">6)write函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型:</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; </span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">ssize_t write(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">fd,</code><code class="cpp keyword bold">const</code> <code class="cpp keyword bold">void</code> <code class="cpp plain">*buf,</code><code class="cpp color1 bold">size_t</code> <code class="cpp plain">nbytes)</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">功能说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;write函数将buf中的nbytes字节<a class="inlink" href="/tag/内容" target="_blank">内容</a>写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;在网络程序中,当我们向套接字文件描述符写时有俩种可能:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp; &nbsp;(1)write的返回值大于0,表示写了部分或者是全部的<a class="inlink" href="/tag/数据" target="_blank">数据</a>.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp; &nbsp;(2)返回的值小于0,此时出现了<a class="inlink" href="/tag/错误" target="_blank">错误</a>.需要根据错误类型来处理.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp; 如果错误为<a class="inlink" href="/tag/eintr" target="_blank">EINTR</a>表示在写的时候出现了<a class="inlink" href="/tag/中断" target="_blank">中断</a>错误.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp; &nbsp;如果错误为<a class="inlink" href="/tag/epipe" target="_blank">EPIPE</a>表示网络连接出现了问题.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">7)read函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型:</span><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; </span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">ssize_t read(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">fd,</code><code class="cpp keyword bold">void</code> <code class="cpp plain">*buf,</code><code class="cpp color1 bold">size_t</code> <code class="cpp plain">nbyte)</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数说明:</span><br><span style="font-family:微软雅黑, 'microsoft yahei';"></span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;read函数是负责从fd中读取内容.当读成功时,read返回实际所读的字节数,如果返回的值是0 表示已经读到文件的结束了,小于0表示出现了错误.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;如果错误为EINTR说明读是由中断引起的,</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';"> &nbsp; &nbsp;如果错误是ECONNREST表示网络连接出了问题.</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">8)close函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数原型:</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">close(sock_fd);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">说明:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">函数运行成功返回0,否则返回-1</span></p><p><strong><span style="font-family:微软雅黑, 'microsoft yahei';">2 <a class="inlink" href="/tag/socket编程" target="_blank">socket编程</a>的<a class="inlink" href="/tag/其他" target="_blank">其他</a>函数说明</span></strong></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">1) 网络字节<a class="inlink" href="/tag/顺序" target="_blank">顺序</a>及其<a class="inlink" href="/tag/转换" target="_blank">转换</a>函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(1) 网络字节顺序</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">每一台机器内部对变量的字节存储顺序不同,而网络<a class="inlink" href="/tag/传输" target="_blank">传输</a>的数据是一定要统一顺序的。所以对内部字节表示顺序与网络字节顺序不同的机器,</span><span style="font-family:微软雅黑, 'microsoft yahei';">一定要对数据进行转换,从程序的可移植性要求来讲,就算本机的内部字节表示顺序与网络字节顺序相同也应该在传输数据以前先调用数据转换函数,</span><span style="font-family:微软雅黑, 'microsoft yahei';">以便程序<a class="inlink" href="/tag/移植" target="_blank">移植</a>到<a class="inlink" href="/tag/其它" target="_blank">其它</a>机器上后能正确执行。真正转换还是不转换是由系统函数自己来决定的。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(2) 有关的转换函数</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp plain">unsigned </code><code class="cpp color1 bold">short</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">htons(unsigned </code><code class="cpp color1 bold">short</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">hostshort):</code></div><div class="line number2 index1 alt1"><code class="cpp comments">//主机字节顺序转换成网络字节顺序,对无符号短型进行操作4bytes</code></div><div class="line number3 index2 alt2"><code class="cpp spaces">&nbsp;</code><code class="cpp plain">unsigned </code><code class="cpp color1 bold">long</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">htonl(unsigned </code><code class="cpp color1 bold">long</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">hostlong):</code></div><div class="line number4 index3 alt1"><code class="cpp comments">//主机字节顺序转换成网络字节顺序,对无符号长型进行操作8bytes</code></div><div class="line number5 index4 alt2"><code class="cpp spaces">&nbsp;</code><code class="cpp plain">unsigned </code><code class="cpp color1 bold">short</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">ntohs(unsigned </code><code class="cpp color1 bold">short</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">netshort):</code></div><div class="line number6 index5 alt1"><code class="cpp comments">//网络字节顺序转换成主机字节顺序,对无符号短型进行操作4bytes</code></div><div class="line number7 index6 alt2"><code class="cpp spaces">&nbsp;</code><code class="cpp plain">unsigned </code><code class="cpp color1 bold">long</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">ntohl(unsigned </code><code class="cpp color1 bold">long</code> <code class="cpp color1 bold">int</code> <code class="cpp plain">netlong):</code></div><div class="line number8 index7 alt1"><code class="cpp comments">//网络字节顺序转换成主机字节顺序,对无符号长型进行操作8bytes</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">注:以上函数原型定义在netinet/in.h里</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">2)IP地址转换</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">有三个函数将<a class="inlink" href="/tag/数字" target="_blank">数字</a>点形式表示的<a class="inlink" href="/tag/字符串" target="_blank">字符串</a>IP地址与32位网络字节顺序的<a class="inlink" href="/tag/二进制" target="_blank">二进制</a>形式的IP地址进行转换</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(1) unsigned <a class="inlink" href="/tag/long" target="_blank">long</a> int inet_addr(<a class="inlink" href="/tag/const" target="_blank">const</a> char * <a class="inlink" href="/tag/cp" target="_blank">cp</a>):该函数把一个用数字和点表示的IP地址的字符串转换成一个无符号长整型,如:</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr_in ina;</code></div><div class="line number2 index1 alt1"><code class="cpp plain">ina.sin_addr.s_addr=inet_addr(</code><code class="cpp string">"222.216.117.11"</code><code class="cpp plain">);</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">该函数成功时:返回转换结果;失败时返回<a class="inlink" href="/tag/常量" target="_blank">常量</a>INADDR_NONE,该常量=-1,二进制的无<a class="inlink" href="/tag/符号" target="_blank">符号</a><a class="inlink" href="/tag/整数" target="_blank">整数</a>-1相当于255.255.255.255,这是一个<a class="inlink" href="/tag/广播" target="_blank">广播</a>地址,所以在程序中</span><span style="font-family:微软雅黑, 'microsoft yahei';">调用iner_addr()时,一定要人为地对调用失败进行处理。由于该函数不能处理广播地址,所以在程序中应该使用函数inet_aton()。</span><br></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(2)int inet_aton(const char * cp,struct in_addr * inp):此函数将字符串形式的IP地址转换成二进制形式的IP地址;成功时返回1,否则返回0,转</span><span style="font-family:微软雅黑, 'microsoft yahei';">换后的IP地址存储在参数inp中。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(3) char * inet_ntoa(struct <a class="inlink" href="/tag/in-addr" target="_blank">in-addr</a> in):将32位二进制形式的ip地址转换为数字点形式的ip地址,结果在函数返回值中返回,返回的是一个指向<a class="inlink" href="/tag/字符" target="_blank">字符</a></span><span style="font-family:微软雅黑, 'microsoft yahei';">串的指针。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">3)字节处理函数</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">Socket地址是多字节数据,不是以空字符结尾的,这和<a class="inlink" href="/tag/c语言" target="_blank">C语言</a>中的字符串是不同的。Linux提供了两组函数来处理多字节数据,一组以b(<a class="inlink" href="/tag/byte" target="_blank">byte</a>)开头,是和<a class="inlink" href="/tag/bsd" target="_blank">BSD</a></span><span style="font-family:微软雅黑, 'microsoft yahei';">系统<a class="inlink" href="/tag/兼容" target="_blank">兼容</a>的函数,另一组以mem(<a class="inlink" href="/tag/内存" target="_blank">内存</a>)开头,是<a class="inlink" href="/tag/ansi" target="_blank">ANSI</a> C提供的函数。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">以b开头的函数有:</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(1) <a class="inlink" href="/tag/void" target="_blank">void</a> bzero(void * s,int n):将参数s指定的内存的<a class="inlink" href="/tag/前" target="_blank">前</a>n个字节设置为0,通常它用来将套接字地址清0。</span></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">(2) void bcopy(const void * <a class="inlink" href="/tag/src" target="_blank">src</a>,void * dest,int n):从参数src指定的内存区域拷贝指定数目的字节内容到参数dest指定的内存区域。</span></p><p><strong><span style="font-family:微软雅黑, 'microsoft yahei';">3 简单的客户端(<a class="inlink" href="/tag/client" target="_blank">client</a>)和<a class="inlink" href="/tag/服务端" target="_blank">服务端</a>(<a class="inlink" href="/tag/server" target="_blank">server</a>)实现<a class="inlink" href="/tag/源码" target="_blank">源码</a></span></strong></p><p><span style="font-family:微软雅黑, 'microsoft yahei';">1) 客户端源码:</span></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp preprocessor">#include &lt;stdio.h&gt;</code></div><div class="line number2 index1 alt1"><code class="cpp preprocessor">#include &lt;string.h&gt;</code></div><div class="line number3 index2 alt2"><code class="cpp preprocessor">#include &lt;unistd.h&gt;</code></div><div class="line number4 index3 alt1"><code class="cpp preprocessor">#include &lt;ctype.h&gt;</code></div><div class="line number5 index4 alt2"><code class="cpp preprocessor">#include &lt;sys/socket.h&gt;</code></div><div class="line number6 index5 alt1"><code class="cpp preprocessor">#include &lt;netinet/in.h&gt;</code></div><div class="line number7 index6 alt2"><code class="cpp preprocessor">#include &lt;arpa/inet.h&gt;</code></div><div class="line number8 index7 alt1"><code class="cpp preprocessor">#include &lt;stdlib.h&gt;</code></div><div class="line number9 index8 alt2"><code class="cpp preprocessor">#include &lt;errno.h&gt;</code></div><div class="line number10 index9 alt1"><code class="cpp comments">// gcc -g -o simple_client simple_client.c</code></div><div class="line number11 index10 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">main(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">argc,</code><code class="cpp color1 bold">char</code> <code class="cpp plain">*argv[])</code></div><div class="line number12 index11 alt1"><code class="cpp plain">{</code></div><div class="line number13 index12 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">char</code> <code class="cpp plain">ip[20]={</code><code class="cpp string">"192.168.10.23"</code><code class="cpp plain">};</code></div><div class="line number14 index13 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">port=10000;</code></div><div class="line number15 index14 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">server_fd;</code></div><div class="line number16 index15 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr_in server_listen_addr;</code></div><div class="line number17 index16 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">bzero(&amp;server_listen_addr,</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(server_listen_addr));</code></div><div class="line number18 index17 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_addr.sin_family=AF_INET;</code></div><div class="line number19 index18 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_addr.sin_port=htons(port);</code></div><div class="line number20 index19 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">inet_pton(AF_INET,</code><code class="cpp string">"192.168.10.23"</code><code class="cpp plain">,(</code><code class="cpp keyword bold">void</code><code class="cpp plain">*)&amp;server_listen_addr.sin_addr);</code></div><div class="line number21 index20 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;</code><code class="cpp comments">// inet_aton(ip,&amp;server_listen_addr.sin_addr);</code></div><div class="line number22 index21 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;</code><code class="cpp comments">// bzero(&amp;(server_listen_addr.sin_zero),8);</code></div><div class="line number23 index22 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_fd=socket(AF_INET,SOCK_STREAM,0);</code></div><div class="line number24 index23 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">ret=connect(server_fd,(</code><code class="cpp keyword bold">const</code> <code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr *)&amp;server_listen_addr,</code></div><div class="line number25 index24 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number26 index25 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"server_fd=[%d] ret=[%d]n"</code><code class="cpp plain">,server_fd,ret);</code></div><div class="line number27 index26 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">if</code><code class="cpp plain">(ret&lt;0)</code></div><div class="line number28 index27 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{ </code></div><div class="line number29 index28 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">perror</code><code class="cpp plain">(</code><code class="cpp string">"error: socket connect!"</code><code class="cpp plain">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number30 index29 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">exit</code><code class="cpp plain">(1);</code></div><div class="line number31 index30 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number32 index31 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">char</code> <code class="cpp plain">data[20]={</code><code class="cpp string">"good luck!n"</code><code class="cpp plain">};</code></div><div class="line number33 index32 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">num=send(server_fd,(</code><code class="cpp keyword bold">void</code><code class="cpp plain">*)data,</code><code class="cpp functions bold">strlen</code><code class="cpp plain">(data),0);</code></div><div class="line number34 index33 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"send bytes[%d][%s]n"</code><code class="cpp plain">,num,data);</code></div><div class="line number35 index34 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">close(server_fd);</code></div><div class="line number36 index35 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">return</code> <code class="cpp plain">1;</code></div><div class="line number37 index36 alt2"><code class="cpp plain">}</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">2)服务端源码:</span><br></p><table border="0" cellpadding="0" cellspacing="0" class="syntaxhighlighter  cpp"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div><div class="line number44 index43 alt1">44</div><div class="line number45 index44 alt2">45</div><div class="line number46 index45 alt1">46</div><div class="line number47 index46 alt2">47</div><div class="line number48 index47 alt1">48</div><div class="line number49 index48 alt2">49</div><div class="line number50 index49 alt1">50</div><div class="line number51 index50 alt2">51</div><div class="line number52 index51 alt1">52</div><div class="line number53 index52 alt2">53</div><div class="line number54 index53 alt1">54</div><div class="line number55 index54 alt2">55</div><div class="line number56 index55 alt1">56</div><div class="line number57 index56 alt2">57</div><div class="line number58 index57 alt1">58</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="cpp preprocessor">#include &lt;stdio.h&gt;</code></div><div class="line number2 index1 alt1"><code class="cpp preprocessor">#include &lt;string.h&gt;</code></div><div class="line number3 index2 alt2"><code class="cpp preprocessor">#include &lt;unistd.h&gt;</code></div><div class="line number4 index3 alt1"><code class="cpp preprocessor">#include &lt;ctype.h&gt;</code></div><div class="line number5 index4 alt2"><code class="cpp preprocessor">#include &lt;sys/socket.h&gt;</code></div><div class="line number6 index5 alt1"><code class="cpp preprocessor">#include &lt;netinet/in.h&gt;</code></div><div class="line number7 index6 alt2"><code class="cpp preprocessor">#include &lt;arpa/inet.h&gt;</code></div><div class="line number8 index7 alt1"><code class="cpp preprocessor">#include &lt;stdlib.h&gt;</code></div><div class="line number9 index8 alt2"><code class="cpp preprocessor">#include &lt;errno.h&gt;</code></div><div class="line number10 index9 alt1"><code class="cpp comments">//gcc -g -o simple_server simple_server.c</code></div><div class="line number11 index10 alt2"><code class="cpp color1 bold">int</code> <code class="cpp plain">main(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">argc,</code><code class="cpp color1 bold">char</code> <code class="cpp plain">*argv[])</code></div><div class="line number12 index11 alt1"><code class="cpp plain">{</code></div><div class="line number13 index12 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">port=10000;</code></div><div class="line number14 index13 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">server_listen_fd;</code></div><div class="line number15 index14 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">server_accept_fd;</code></div><div class="line number16 index15 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr_in server_listen_addr;</code></div><div class="line number17 index16 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr_in server_accept_addr;</code></div><div class="line number18 index17 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">bzero(&amp;server_listen_addr,</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(server_listen_addr));</code></div><div class="line number19 index18 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">bzero(&amp;server_accept_addr,</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(server_accept_addr));</code></div><div class="line number20 index19 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_addr.sin_family=AF_INET;&nbsp; </code></div><div class="line number21 index20 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_addr.sin_addr.s_addr=INADDR_ANY;</code></div><div class="line number22 index21 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_addr.sin_port=htons(port);</code></div><div class="line number23 index22 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_listen_fd=socket(AF_INET,SOCK_STREAM,0);</code></div><div class="line number24 index23 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">if</code><code class="cpp plain">(-1==server_listen_fd)</code></div><div class="line number25 index24 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{</code></div><div class="line number26 index25 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">perror</code><code class="cpp plain">(</code><code class="cpp string">"fail to create socket!"</code><code class="cpp plain">);</code></div><div class="line number27 index26 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">exit</code><code class="cpp plain">(1);</code></div><div class="line number28 index27 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number29 index28 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">if</code><code class="cpp plain">(bind(server_listen_fd,(</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr*)&amp;server_listen_addr,</code></div><div class="line number30 index29 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(server_listen_addr))==-1)</code></div><div class="line number31 index30 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{</code></div><div class="line number32 index31 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">perror</code><code class="cpp plain">(</code><code class="cpp string">"can't to bind"</code><code class="cpp plain">);</code></div><div class="line number33 index32 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">exit</code><code class="cpp plain">(1);</code></div><div class="line number34 index33 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number35 index34 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">if</code><code class="cpp plain">(listen(server_listen_fd,10)==-1)</code></div><div class="line number36 index35 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{</code></div><div class="line number37 index36 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">perror</code><code class="cpp plain">(</code><code class="cpp string">"can't to bind"</code><code class="cpp plain">);</code></div><div class="line number38 index37 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">exit</code><code class="cpp plain">(1);</code></div><div class="line number39 index38 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number40 index39 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">while</code><code class="cpp plain">(1)</code></div><div class="line number41 index40 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{&nbsp; </code></div><div class="line number42 index41 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">size=</code><code class="cpp keyword bold">sizeof</code><code class="cpp plain">(server_accept_addr);</code></div><div class="line number43 index42 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"server socket begin accept:n"</code><code class="cpp plain">);</code></div><div class="line number44 index43 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">server_accept_fd=accept(server_listen_fd,(</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">sockaddr*)&amp;server_accept_addr,&amp;size);</code></div><div class="line number45 index44 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"accept con_fd=%dn"</code><code class="cpp plain">,con_fd);</code></div><div class="line number46 index45 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">if</code><code class="cpp plain">(server_accept_fd&lt;0)</code></div><div class="line number47 index46 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number48 index47 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">perror</code><code class="cpp plain">(</code><code class="cpp string">"error:socket accept!exited!n"</code><code class="cpp plain">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number49 index48 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">exit</code><code class="cpp plain">(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number50 index49 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number51 index50 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">num=0;</code></div><div class="line number52 index51 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">char</code> <code class="cpp plain">data[200]={0};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number53 index52 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp color1 bold">int</code> <code class="cpp plain">ret=read(server_accept_fd,(</code><code class="cpp keyword bold">void</code><code class="cpp plain">*)data,199);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></div><div class="line number54 index53 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">close(server_accept_fd);</code></div><div class="line number55 index54 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"DATA:[%s]n"</code><code class="cpp plain">,data);</code></div><div class="line number56 index55 alt1"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp plain">}</code></div><div class="line number57 index56 alt2"><code class="cpp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="cpp keyword bold">return</code> <code class="cpp plain">1;</code></div><div class="line number58 index57 alt1"><code class="cpp plain">}</code></div></div></td></tr></tbody></table><p><span style="font-family:微软雅黑, 'microsoft yahei';">以上代码均在<a class="inlink" href="/tag/centos" target="_blank">CentOS</a> 5.4上<a class="inlink" href="/tag/编译" target="_blank">编译</a><a class="inlink" href="/tag/调试" target="_blank">调试</a>通过。</span><br></p><p><br></p>
   <ul align="left" style="position:relative;top:0px;">
     <!------------------- google ad  start --------------------->
     <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- 文章内容底部728-90 -->
    <ins class="adsbygoogle" style="display: inline-block; width: 722px; height: 90px;" data-ad-client="ca-pub-0562613540409681" data-ad-slot="1971186605" data-adsbygoogle-status="done"><ins id="aswift_2_expand" style="display:inline-table;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:722px;background-color:transparent;"><ins id="aswift_2_anchor" style="display:block;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:722px;background-color:transparent;"><iframe width="722" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_2" name="aswift_2" style="left:0;position:absolute;top:0;border:0px;width:722px;height:90px;"></iframe></ins></ins></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
     <!------------------- google ad  end --------------------->
   </ul>

   <ul style="position:relative;top:0px;background:#eaecee;width:600px;">
    
    <div><h3>您可能感兴趣的文章:</h3></div><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-951311592990005999.html" target="_blank" class="link1" style="color:blue;" title="对于用客户端上网的用户(客户端不支持linux)如何在linux下上网?"><nobr>对于用客户端上网的用户(客户端不支持linux)如何在linux下上网?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-15654820968572849041.html" target="_blank" class="link1" style="color:blue;" title="在Linux下开发手机客户端或Pc客户端交互的服务器,需要学哪些知识?"><nobr>在Linux下开发手机客户端或Pc客户端交互的服务器,需要学哪些知识?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-5881220603695944210.html" target="_blank" class="link1" style="color:blue;" title="linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?"><nobr>linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-16881078577304177178.html" target="_blank" class="link1" style="color:blue;" title="linux 能ping通客户端ip,但ping不通客户端的域名。"><nobr>linux 能ping通客户端ip,但ping不通客户端的域名。</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-3251110576618660477.html" target="_blank" class="link1" style="color:blue;" title="Linux网络编程(怎样实现两个客户端之间的通信)"><nobr>Linux网络编程(怎样实现两个客户端之间的通信)</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-5912491457443513744.html" target="_blank" class="link1" style="color:blue;" title="Linux的BBS客户端 QTerm"><nobr>Linux的BBS客户端 QTerm</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-16108870126897926760.html" target="_blank" class="link1" style="color:blue;" title="Linux的博客客户端 Drivel"><nobr>Linux的博客客户端 Drivel</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-2231259276249171379.html" target="_blank" class="link1" style="color:blue;" title="Linux 代理 一个客户端来就创建一个连接"><nobr>Linux 代理 一个客户端来就创建一个连接</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-8234441944877976426.html" target="_blank" class="link1" style="color:blue;" title="linux客户端如何配置网络?"><nobr>linux客户端如何配置网络?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-16301873339824266491.html" target="_blank" class="link1" style="color:blue;" title="linux socket多客户端程序"><nobr>linux socket多客户端程序</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6549366569153844050.html" target="_blank" class="link1" style="color:blue;" title="linux下用kerberos客户端加入windows域的问题"><nobr>linux下用kerberos客户端加入windows域的问题</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-7295723888714356901.html" target="_blank" class="link1" style="color:blue;" title="求助:Linux下ftp客户端代码编写"><nobr>求助:Linux下ftp客户端代码编写</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-10676084222497107148.html" target="_blank" class="link1" style="color:blue;" title="linux怎样装那个锐杰认证客户端"><nobr>linux怎样装那个锐杰认证客户端</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-7596315405809575397.html" target="_blank" class="link1" style="color:blue;" title="Linux系统做服务器,客户端可使用windows系列的系统吗"><nobr>Linux系统做服务器,客户端可使用windows系列的系统吗</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-13423123398235563404.html" target="_blank" class="link1" style="color:blue;" title="Linux下默认的邮件客户端是什么"><nobr>Linux下默认的邮件客户端是什么</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-15705703133175363694.html" target="_blank" class="link1" style="color:blue;" title="linux作为客户端,跟windows通信,如何保持一直在线?"><nobr>linux作为客户端,跟windows通信,如何保持一直在线?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-14412089178161319917.html" target="_blank" class="link1" style="color:blue;" title="linux中监听客户端访问tomcat的命令"><nobr>linux中监听客户端访问tomcat的命令</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-9324345355342944832.html" target="_blank" class="link1" style="color:blue;" title="Linux的Twitter客户端 Twitux"><nobr>Linux的Twitter客户端 Twitux</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-597138202451479799.html" target="_blank" class="link1" style="color:blue;" title="Linux邮件客户端 Evolution"><nobr>Linux邮件客户端 Evolution</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-9549879633396249679.html" target="_blank" class="link1" style="color:blue;" title="linux下的写的tcp客户端,connect到windows的服务器超时���"><nobr>linux下的写的tcp客户端,connect到windows的服务器超时</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/article/8406467497605868969.html" target="_blank" class="link1" style="color:blue;" title="Linux下c/c++ boost安装及并发编程库mpi介绍"><nobr>Linux下c/c++ boost安装及并发编程库mpi介绍</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-12676128813847613462.html" target="_blank" class="link1" style="color:blue;" title="都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?("><nobr>都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?(</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-7725886633182908529.html" target="_blank" class="link1" style="color:blue;" title="我想学Linux编程,请大家推荐几本学习Linux下C/C++编程的书"><nobr>我想学Linux编程,请大家推荐几本学习Linux下C/C++编程的书</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6086509577054298136.html" target="_blank" class="link1" style="color:blue;" title="学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?"><nobr>学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-13922516163973827145.html" target="_blank" class="link1" style="color:blue;" title="我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?"><nobr>我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-16114670442222214716.html" target="_blank" class="link1" style="color:blue;" title="linux下编程跟平时的编程有什么区别吗?"><nobr>linux下编程跟平时的编程有什么区别吗?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-9129284649176138972.html" target="_blank" class="link1" style="color:blue;" title="unix编程与linux编程有什么区别?"><nobr>unix编程与linux编程有什么区别?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-13714804188272224627.html" target="_blank" class="link1" style="color:blue;" title="Linux下的编程指的就是Shell编程吗?"><nobr>Linux下的编程指的就是Shell编程吗?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-3776494499401254207.html" target="_blank" class="link1" style="color:blue;" title="帮我介绍基本linux下编程的书,《Linux上的C编程》这本书怎么样?还有别的书吗?"><nobr>帮我介绍基本linux下编程的书,《Linux上的C编程》这本书怎么样?还有别的书吗?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-17471582482840058945.html" target="_blank" class="link1" style="color:blue;" title="Linux下使用openssl api编程socket编程,为什么要编译啊?"><nobr>Linux下使用openssl api编程socket编程,为什么要编译啊?</nobr></a><br></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6771961489010773057.html" target="_blank" class="link1" style="color:blue;" title="请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有"><nobr>请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有</nobr></a><br></li> 
    
   </ul>

   <ul style="position:relative;top:0px;background:#eaecee;width:660px;">
    <li style="line-height:18px;font-size:12px;list-style-type:none;">
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。<br>本站(WWW.169IT.COM)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.<br>转载请注明:文章转载自:[<a href="http://www.169it.com" target="_blank">169IT-IT技术资讯</a>]<br>本文标题:<a href="/article/3219492463.html" target="_blank">Linux c socket编程:简单的客户端(client)和服务端(server)实现</a><br> 
    </li>
   </ul>
  </div>

    <div style="line-height:36px;float:left;width:100%;font-family:'微软雅黑';">
      <div style="float:left;padding-left:28px;"><b>相关文章推荐:</b></div>
    </div>
    <div style="padding-left:28px;float:left;width:50%;font-family:'微软雅黑';" align="left">
    <li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-4246767813790680884.html" target="_blank" class="link1" style="color:blue;" title="用LINUX做HELIX服务器,用W2K做客户机,客户机视频点播,连接时出现问题!!!!"><nobr>用LINUX做HELIX服务器,用W2K做客户机,客户机视频点播,连接时出现问题!!!!</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-11045772658925596356.html" target="_blank" class="link1" style="color:blue;" title="在单位用windows客户机可在ie设置代理上网,但linux客户机不行"><nobr>在单位用windows客户机可在ie设置代理上网,但linux客户机不行</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6900912531272955364.html" target="_blank" class="link1" style="color:blue;" title="关于linux socket 客户端编程"><nobr>关于linux socket 客户端编程</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-14523068799994442550.html" target="_blank" class="link1" style="color:blue;" title="关于linux环境下服务器 是如何获取客户端的相关硬件信息"><nobr>关于linux环境下服务器 是如何获取客户端的相关硬件信息</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-15585252130032929813.html" target="_blank" class="link1" style="color:blue;" title="linux能否成为动态域名解析客户端的动态域名解析服务器?"><nobr>linux能否成为动态域名解析客户端的动态域名解析服务器?</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-14683533769039212161.html" target="_blank" class="link1" style="color:blue;" title="客户端是linux通过socket编程实现服务器端win平台接收?"><nobr>客户端是linux通过socket编程实现服务器端win平台接收?</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-9410854589465176061.html" target="_blank" class="link1" style="color:blue;" title="请问有没有Linux下SOCKET服务端和客户端的接口函数!!"><nobr>请问有没有Linux下SOCKET服务端和客户端的接口函数!!</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6923751695909713217.html" target="_blank" class="link1" style="color:blue;" title="linux客户端能不能使用x界面呀"><nobr>linux客户端能不能使用x界面呀</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-13974109421217568020.html" target="_blank" class="link1" style="color:blue;" title="高分请教:如何在linux上建vpn的客户端!"><nobr>高分请教:如何在linux上建vpn的客户端!</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-2220175082138916878.html" target="_blank" class="link1" style="color:blue;" title="客户端访问Linux作为服务器的网站,flash无法显示。"><nobr>客户端访问Linux作为服务器的网站,flash无法显示。</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-1731625118941857366.html" target="_blank" class="link1" style="color:blue;" title="哪里有中兴认证客户端linux版本下载?"><nobr>哪里有中兴认证客户端linux版本下载?</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-198830879587202504.html" target="_blank" class="link1" style="color:blue;" title="大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误"><nobr>大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-6784812519582431517.html" target="_blank" class="link1" style="color:blue;" title="如何在远程linux客户端上运行gui程序"><nobr>如何在远程linux客户端上运行gui程序</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-11745492667526351842.html" target="_blank" class="link1" style="color:blue;" title="虾米电台Linux客户端 xmradio"><nobr>虾米电台Linux客户端 xmradio</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-6126852456703878930.html" target="_blank" class="link1" style="color:blue;" title="百度云linux客户端"><nobr>百度云linux客户端</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-soft-c-cpp/article-12507435019382581758.html" target="_blank" class="link1" style="color:blue;" title="锐捷认证Linux客户端 RuijieClient"><nobr>锐捷认证Linux客户端 RuijieClient</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-5026947256050659050.html" target="_blank" class="link1" style="color:blue;" title="求FTP客户端源程序或相关资料(C,LINUX )"><nobr>求FTP客户端源程序或相关资料(C,LINUX )</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-4551506820848779190.html" target="_blank" class="link1" style="color:blue;" title="~~双网卡WinXP设置为共享上网,为什么Linux客户机不能上网~~"><nobr>~~双网卡WinXP设置为共享上网,为什么Linux客户机不能上网~~</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-10810119729369989659.html" target="_blank" class="link1" style="color:blue;" title="如何使用LINUX为不同子网的WIN98客户端不同的应用程序做代理?给分100"><nobr>如何使用LINUX为不同子网的WIN98客户端不同的应用程序做代理?给分100</nobr></a></li><li style="line-height:28px;font-size:14px;list-style-type:none;font-family:'微软雅黑';" class="liclass"><a href="/tech-qa-linux/article-12070768929822425793.html" target="_blank" class="link1" style="color:blue;" title="Linux 下有没有FTP服务器支持客户端修改密码。。。���"><nobr>Linux 下有没有FTP服务器支持客户端修改密码。。。</nobr></a></li>        </div>
</div>
posted @ 2019-07-07 11:45  xjyxp01  阅读(186)  评论(0编辑  收藏  举报